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())