Coder simplement, efficacement avec TeXgraph
Publié: 02 Juin 2019 19:04
L'objectif de ce post est de regrouper quelques astuces permettant d'optimiser son code source TeXgraph. Toutes ces astuces sont validées par le Boss, Mr Fradin himself.
La plupart de ces conseils pourront paraitre triviaux, mais nul n'est à l'abris de tomber dans ces petits pièges...
Les TeXgrammeurs confirmés pourront proposer leurs astuces dans la suite de ce fil et celles-ci seront par la suite validées (ou lamentablement moquées) par le patron qui les ajoutera dans ce post.
Les novices pourront quand à eux poser leur questions sur telle ou telle manière de coder telle ou telle chose ce qui permettra d'alimenter cette liste de bonnes pratiques.
La plupart de ces conseils pourront paraitre triviaux, mais nul n'est à l'abris de tomber dans ces petits pièges...
Les TeXgrammeurs confirmés pourront proposer leurs astuces dans la suite de ce fil et celles-ci seront par la suite validées (ou lamentablement moquées) par le patron qui les ajoutera dans ce post.
Les novices pourront quand à eux poser leur questions sur telle ou telle manière de coder telle ou telle chose ce qui permettra d'alimenter cette liste de bonnes pratiques.
- Parcours de liste :
À éviter (complexité en $O(n^2)$): for k from 1 to Nops(L) do z:=L[k], ... od, il vaut mieux écrire (complexité en $O(n)$):- Code: Tout sélectionner
k:=0, for z in L do Inc(k), ... od
Si on n'a pas besoin de la valeur de l'indice $k, alors il suffit d'écrire:- Code: Tout sélectionner
for z in L do ... od
- Parcours avec condition : lorsqu'il faut vérifier une condition sur chaque élément d'une liste avant de traiter celui-ci, on peut utiliser un if à l'intérieur d'un for : for z in L do if z<=4 then ... else ... fi od, mais on peut aussi utiliser une structure prévue pour ça :
- Code: Tout sélectionner
for z in L andif z<=4 do ... else ... odfi
la partie else étant facultative, il peut aussi avoir des elif. - Instruction break() : depuis la version test 1.988, on peut casser une boucle for avec la nouvelle instruction break() ce qui permet d'éviter de parcourir inutilement toute la liste; Exemple, recherche de la première occurrence du chiffre 4 dans une liste :
- Code: Tout sélectionner
k := 0, for z in L Inc(k,1), if z=4 then break() fi od
- Tester si une variable est vide :
À éviter if not(nil(var)) then ... fi, il vaut mieux écrire :- Code: Tout sélectionner
if var<>Nil then ... fi
- Incrémenter ou décrémenter une variable :
À éviter k := k+x, il est plus efficace d'écrire- Code: Tout sélectionner
Inc(k, x)
Dans le premier cas le contenu de $k$ est dupliqué, par dans le second cas ($k$ et $x$ peuvent être des listes !) - Dessiner plusieurs lignes polygonales de mêmes attributs (épaisseur, couleur, remplissage,...) :
À éviter : Line(liste1), Line(liste2), ..., il vaut mieux utiliser- Code: Tout sélectionner
Line([liste1,jump,liste2,jump,...])
Dans le deuxième cas, il y a un seul objet graphique qui est créé (une ligne à plusieurs composantes). Par exemple, plutôt que d'écrire :
for $z in L do Line([z, z+bla, z+blabla]) od, il vaut mieux écrire :- Code: Tout sélectionner
Line( for $z in L do z, z+bla, z+blabla, jump od )
Cela vaut aussi pour dessiner un ensemble de points de mêmes attributs (commande Dot())