|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
![]() ![]() ![]() |
Bonjour à toutes et à tous,
Le forum Pascal regorge de conseils et de bonnes pratiques de programmation. Force est de constater qu'il faut beaucoup de recherches pour les retrouver et que certains conseils doivent sans cesse être répétés aux développeurs qui débutent en Pascal. D'où l'idée de les regrouper dans un unique fil de discussion. Nous en profitons pour vous rappeler l'article de Philippe Gormand sur l'écriture de code Pascal, qui contient plein de conseils d'indentation et de mise en forme, de choix d'identificateurs, etc. Nous vous invitons à partager avec tous les membres du forum vos meilleures pratiques. Lorsqu'il y aura suffisamment de matière, nous pourrons rassembler tous vos conseils dans un véritable guide.
__________________
Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell] |
|
70
|
|
|
#2 | ||||||||||
![]() ![]() ![]() |
Quelques pratiques pour initier le débat :
) : avant de commencer à coder, couchez votre programme sur papier. Que ce soit en pseudo-code ou en langage courant, écrivez votre programme ou votre algorithme de manière claire et exécutez-le sur papier. Ce n'est qu'après cette étape de conception et de tests que vous pourrez traduire votre programme en Pascal.
Qui peut facilement voir où manque un end dans ce code ? Code :
Code :
Par exemple, dans une procédure, indiquez l'utilité de vos variables locales. Si, dans un traitement, vous effectuez un tri, précédez le tri d'un commentaire du genre "Tri du tableau par quick-sort" : vous serez bien content(e), six mois plus tard, d'avoir ce commentaire pour vous rappeler immédiatement ce que fait votre code sans avoir à le relire pour le comprendre.
Par exemple, ce code : Code :
Code :
En appliquant systématiquement cette règle, on facilite la compréhension et le débogage d'un programme.
Si l'on reprend un exemple cité plus haut : Code :
Code :
Function Age_Maximum (Tableau : TTabEntiers) : Integer;
__________________
Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell] |
||||||||||
|
60
|
|
|
#3 | ||
|
Membre éclairé
![]() ![]() |
Mettre un préfixe à ses variables en fonction du contexte
-Paramètre A + nom de la variable -Variable local L + nom de la variable -Champs d'une classe F + nom de variable Lors de la création d'un objet pensez toujours à mettre (quand c'est possible) sa destruction dans un finally. Code :
Je suis pour ma part totalement contre le with qui empêche l'inspection correct des variables en delphi et qui est source de bug. |
||
|
|
30
|
|
|
#4 |
|
Membre expérimenté
![]() ![]() Titouan Créac'hÉtudiant Inscription : mai 2009 Messages : 254 ![]() |
Pensez à utilisé plusieurs fichiers pour de long code. Surtout avec Tp.
C'est plus facile de changer de fenetre avec F6 que de parcourir 70 fonctions ou procedures .J'ai déja vu des codes avec 150 fonctions dans le main. C'est pas humain Ce que je fais c'est que je donne le 'U' a mon préfix d'unit, comme ça je sais directement ou est le main. comme par exemble Uoption ou Usauvegarde. Pour moi, le plus important a part l'indentation est le fait de mettre de nom explicite a vos variables. Comme j'ai aussi lut dans 'Code Proprement', les commentaire c'est bien mais il ne faut pas trop en mettre sinon, ça alourdie vachement le code. Certaines fois, une procedure avec de nom claire, et un bon code peut éviter une panoplie de commentaires mais les commentaires sont utiles aussi; Aussi éviter les GOTO et les Break. Il y d'autre moyen plus lisible de s'y prendre. Titeeee |
|
|
30
|
|
|
#5 |
|
Membre chevronné
![]() Développeur Java Inscription : mars 2004 Messages : 619 ![]() |
Bonjour,
pour ma part, contrairement à l'article de Philippe Gormand sur l'écriture de code Pascal. Je suis pour toujours mettre begin end. Comme ça si on rajoute dans un block on est sûr que c'est pris et on est sûr où s'arrête le block Totalement contre le "with" comme teubies, car c'est illisible. La "ligne de séparation" à voir, c'est utile pour l'entête de fonction et encore. Ca alourdi la lecture du code je trouve. Pour l'utilisation du break voir au cas par cas, dès fois ça simplifie les choses et évite de mettre des conditions à rallonge. |
|
|
30
|
|
|
#6 | ||||||||
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 539 ![]() |
j'ai changé 5 ou 6 fois de choix de mise en forme de mes sources au cours de ma longue carrière
il faut savoir qu'un source est d'autant plus lisible qu'il est sous la forme à laquelle on est habitué. par exemple, le begin en fin de ligne ou à la ligne va être pratique ou pas selon l'habitude Code :
Code :
Code :
pour ce qui est de l'usage de With, c'est un outil comme un autre je l'utilise notamment avec les Canvas, ça permet en modifiant une ligne de changer les choses sans passer par une variable temporaire Code :
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
||||||||
|
40
|
|
|
#7 | ||||
|
Membre émérite
![]() Jérémy Analyste programmeeur Delphi / C# Inscription : mars 2005 Messages : 738 ![]() |
Pour ma part, je vais reprendre l'un des éléments de Alcatiz (le passage de paramètres) et développer un peu plus car, c'est selon moi un point essentiel à l'optimisation
A l'exception des varaibles objet - Tout paramètre dont la valeur en utilisée seulement en entrée et qui n'est pas modifiée en sortie doit être passée en const - Tout paramètre dont la valeur est systématiquement modifiée et dont la valeur initiale n'est pas utilisée doit être passée en out - Tout paramètre dont la valeur est utilisée en entrée comme en sortie doit être passé en var On peut rapidement voir la différence par exemple lors du passage de paramètre de type chaine et en particulier les WideString Un autre point que je trouve particulièrement important, c'est d'éviter d'utiliser les composant dans une procédure de traitement qui ne nécessite pas leur utilisation. Exemple concret à ne pas faire : Code :
Code :
|
||||
|
|
40
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 539 ![]() |
autre bonne pratique, et c'est valable dans tous les langages, ne pas faire une fonction de 15 pages de long, c'est imbuvable. Et sur 15 pages on peut forcément identifier des sous-traitements à mettre dans des sous-fonctions afin de rendre le tout plus digeste.
dans le même genre, il faut bannir le copier/coller de code (celui-là même qui produit des fonctions de 15 pages), si un code est suffisamment proche d'un autre pour permettre un copier/coller, c'est que le code peut être paramétré dans une sous-fonction qui sera utilisée deux fois.
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
|
60
|
|
|
#9 | ||||
|
Membre Expert
![]() Inscription : septembre 2009 Messages : 980 ![]() |
Evitez les dépendances aux variables globale de classe dans l’implémentation de cette classe (FormX):
NE PAS FAIRE : Code :
FAIRE : Code :
__________________
[ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ] Ma messagerie n'est pas la succursale du forum... merci! |
||||
|
|
20
|
|
|
#10 |
![]() ![]() Inscription : juillet 2007 Messages : 1 296 ![]() |
j' ajouterai qu'il faut éviter de mélanger de la POO et du procédurale surtout dans une même unité (fichier). Le cas le plus courant se retrouve dans les forms.
|
|
|
20
|
|
|
#11 |
|
Membre Expert
![]() Inscription : septembre 2009 Messages : 980 ![]() |
Structurer les fichiers sources :
- Nommer l'unité principale "Main" par exemple ou "TotoMain" pour votre projet "Toto". - Les fonctions d'outils peuvent être délocalisée dans une unité "Tools" ou "Utils" ou encore "TotoUtils", "TotoTools" - Chaque unité doit être nommée selon son utilisation, Outils (Tools, Utils), Traduction (Lang, Language), Importation/Exportation (Import, Export), gestion des données (BinFiles, DatFiles, ZipFiles, DbFiles) etc. Soyez clair, précis et concis. - Placez les ressources dans un sous-dossiers "Ressources" ou "Res" ou encore "Medias", hiérarchisez correctement vos projets en séparant chaques types de données (sons, images, scripts etc), exemple de structure claire :
__________________
[ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ] Ma messagerie n'est pas la succursale du forum... merci! |
|
|
20
|
|
|
#12 |
|
Membre Expert
![]() Inscription : octobre 2002 Messages : 1 505 ![]() |
Pour rajouter sur ce qui a déjà été dit je trouve intéressant d'utiliser la notation hongroise http://fr.wikipedia.org/wiki/Notation_hongroise ça permet de visualiser immédiatement le type de variable, surtout quand on travaille à plusieurs sur les même sources.
|
|
|
10
|
|
|
#13 | ||||
|
Membre émérite
![]() ![]() Prof, développeur amateur vaguement éclairé... Inscription : mars 2004 Messages : 623 ![]() |
Se contraindre à choisir des identificateurs en anglais, car c'est la langue véhiculaire du développement.
Pour les compilateurs qui le permettent (Delphi...), en programmation objet, ne pas hésiter à consolider le code en pratiquant un usage réfléchi des directives private, protected, public. Éviter d'accéder directement aux champs des objets (qui seront mis en private). Se contraindre (je sais, c'est parfois pénible) à privilégier l'utilisation des propriétés en déclarant celles qui n'ont pas à être modifiées en lecture seule. Ceci: Code :
Code :
|
||||
|
10
|
|
|
#14 | ||||||
|
Membre expérimenté
![]() ![]() Titouan Créac'hÉtudiant Inscription : mai 2009 Messages : 254 ![]() |
J'aime bien mettre le begin sur la ligne des procedures exemple :
Code :
Code :
Sauf quand y'a des beaucoup de variables; mais sinon, j'essai de les mettre en ligne aussi; Code :
|
||||||
|
|
00
|
|
|
#15 | |||||||
|
Expert Confirmé
![]() ![]() Inscription : août 2006 Messages : 3 433 ![]() |
Mau,
Citation:
Quelle boucle ? [/TROLL] ![]() D'autant plus que rien ne t'oblige à écrire tes if ... then begin sur la même ligne. Personnellement, je préfère quelque chose comme Code :
Mais bien sûr, tout cela définit des préférences personnelles. Et il y a bien entendu les noms à définir proprement, qui doivent être explicites et écrits clairement est plus lisible que et bien plus agréable à lire que ce qui amène à mettre un commentaire, avec perte de l'information sur chaque usage de la variable (ou constante, fonction ...), particulièrement quand on a pas mal de variables dans une procédure. etc. Bref, un gros effort sur la présentation, lisibilité du code. C'est un peu contraignant au début, mais avec l'habitude, ça devient automatique, et fait gagner beaucoup de temps quand on reprend un code après des mois (et même des années, ça m'est arrivé), et plus encore quand quelqu'un d'autre doit reprendre le code
__________________
Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir. |
|||||||
|
|
00
|
|
|
#16 | |
|
Membre émérite
![]() ![]() Prof, développeur amateur vaguement éclairé... Inscription : mars 2004 Messages : 623 ![]() |
Citation:
Plus généralement, on a tous nos petites habitudes, ça fait aussi partie de la liberté tant que le code est lisible et compréhensible. Et pour ça, trois règles : indenté, léger, commenté. Après, 'faut pas tomber dans l'intégrisme. J'écris ça de façon générale, hein, ça n'est adressé à personne en particulier, bien évidemment... |
|
|
00
|
|
|
#17 | ||||
|
Membre expérimenté
![]() ![]() Titouan Créac'hÉtudiant Inscription : mai 2009 Messages : 254 ![]() |
Pardon, j'avais penser au début à mettre une boucle for
![]() Code :
alors que Code :
Après c'est un choix personnel. |
||||
|
|
00
|
|
|
#18 | |
|
Expert Confirmé
![]() ![]() Inscription : août 2006 Messages : 3 433 ![]() |
Qia,
Citation:
Si mes programmes doivent être repris par quelqu'un d'autre, il faudra forcément qu'il/elle comprenne assez bien le français, car toutes les applications que je développe sont sont des commandes faites par des sociétés/associations... françaises (en sus des applis perso, bien entendu), et ceux/celles qui auront malgré tout l'occasion de les lire - en principe, personne - n'auront qu'à faire l'effort, il n'y a pas de raison que ce soit toujours dans le même sens (je te vois venir : "l'anglais est la langue internationale, ...", mais pffft Pour le reste, il est clair que les préférences personnelles interviennent fortement, et que notre œil s'habitue à ... nos habitudes.
__________________
Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir. |
|
|
|
00
|
|
|
#19 |
|
Membre émérite
![]() ![]() Prof, développeur amateur vaguement éclairé... Inscription : mars 2004 Messages : 623 ![]() |
Eh bien, en plus du fait que l'anglais soit effectivement international (
est agréable, tandis que m'a toujours fait bondir au plafond. C'est quoi, ce franglais ? 'Pi, pas d'accents en plus ! Je sais, Delphi permet les accents depuis un certain temps, mais ce n'a pas été toujours le cas. Enfin voilà, c'est aussi purement esthétique. J'dois être artiss', quèqu'part. |
|
00
|
|
|
#20 | |
![]() ![]() ![]() Inscription : avril 2002 Messages : 2 278 ![]() |
Citation:
__________________
M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com