Bonnes pratiques Delphi
par
, 17/01/2017 à 16h15 (1260 Affichages)
Formater les noms
Il faut éviter d'abréger les noms des méthodes et des variables, un nom clair permet d'avoir un code plus facile à comprendre et donc à maintenir. Faire attention à la case et séparer les mots par des majuscules plutôt que des underscores.
Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3MettreAJourBaseDeDonnees // plutôt que .. Mettre_A_Jour_Base_De_Donnees
Indentation
Pour un soucis de revue de code et de compréhension, un code indenter correctement est plus facile à lire. Nous utilisons en principe une indentation de deux ou trois caractères.
Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2FListItems := TObjectList<TDataMessage>.Create; FbMailHTML := True;
Variables
Éviter de déclarer plusieurs variables sur la même ligne:
Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 var sMessage, sErreur, sInfo, sQuestion: string;
Portée des variables
Il est préférable de limiter le plus possible la portée des variables, utiliser le strict private. Si une constante est utiliser dans une classe, l'ajouter dans la partie strict private.
Si les variables sont sur une nouvelle ligne de déclaration, le code est plus simple à lire:
Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 var sMessage : string; sErreur : string; sInfo : string; sQuestion: string;
Procédures / Fonctions
En principe une fonction permet de retourner un résultat et une procédure de changer le comportement d'une classe. De ce fait une procédure peux appeler des fonctions mais le contraire n'est pas souhaitable, si un utilisateur appel une fonction il ne veut pas forcément apporter une modification sur l'objet.
Méthodes
Grouper les fonctions et les procédures, dans une classes écrire le constructeur, le destructeur, les procédures, les fonctions et les property.
Les espaces
Ajouter des espaces autour des opérateurs pour avoir un code plus clair:
Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 // écrire i := iChiffre1 + iChiffre2; // plutôt que i:=iChiffreUn+iChiffre2;
C'est aussi le cas pour les méthodes, ajouter un espace après les virgules , deux points : et les points virgules ; mais pas avant, préfixer les variables des méthodes par un a.
Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part procedure MettreAJourBaseDeDonnees(aNomBdd: string; aTempsAttente: integer);
Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 var i: integer; s: string; begin // ... MettreAJourBaseDeDonnees(sNomDeMaBase, iTempAttente);
Begin / End
Il est préférable de toujours écrire les begin/end, begin est écrit sur une nouvelle ligne en minuscule.
Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 if bMonTest then begin // ... end;
Ecrire les blocs begin / end même pour une seule ligne de code.
Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 if bMonTest then MettreAJourBaseDeDonnees; // peux facilement devenir : if bMonTest then MettreAJourBaseDeDonnees; LancerBackupBDD;
Quand un begin est écrit, ajouter de suite le end et écrire entre les deux.
Capitalisation
Les variables commencent par un indicateur de type, puis une majuscule.
Les mots qui commencent toujours par une majuscule:
Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Result Exit Break True False
et ceux qui sont toujours écrit en minuscule:
Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 integer begin end if for while repeat until then do var const to else procedure function contructor destructor finally except
Allocation de mémoire
Détruire directement un objet qui vient d'être créé dans un try .. finally ou un destructeur.
Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 // il faut créer les objets avant le try MonObjet := TMonObjet.Create; try // ... finally DetruitObjet(MonObjet); end;
Portée des uses
Si un uses peut être déplacer dans la partie implementation cela permet d'éviter les références circulaire mais aussi de garder un code propre et lisible.
Formater des chaines
Il existe la méthode Format qui permet de formater des chaines, elle évite de concaténer avec des plus (+) et de faire attention aux espaces:
Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MaChaine := 'Bonjour je m''appelle ' + aPrenom + ' et j''ai ' + aAge + ' ans.'; MaChaine := Format('Bonjour je m''appelle %s et j''ai %d ans.', [aPrenom, aAge]);
Commentaires
Si le code est écrit correctement, de manière propre avec des noms de variables parlant il n'est pas forcément nécessaire de commenter son code. Si du code doit être commenter peut être qu'il n'est pas écrit de la meilleur des manières ?
En revanche il est préférable de commenter les méthodes des classes pour avoir la description lors de l’auto complétion.
Booléens
Éviter d'utiliser les booléens dans les appels des méthodes, préférer les énumérations même si c'est pour seulement deux cas possible:
Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part MettreAJourBaseDeDonnees(False);
est moins parlant que :
Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 type TTypeDataBase = (tdbDonnees, tdbFichier); // ... MettreAJourBaseDeDonnees(tdbFichier);