42
Coder proprement Par Dimitri PIANETA 1 08/07/2019 coder proprement

Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Coder proprement

Par Dimitri PIANETA

108/07/2019 coder proprement

Page 2: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Préface

• Ce cours a été crée par rapport au livre de Robert C. Martin « coder proprement ».

• Et aux annexes de ce même livre

208/07/2019 coder proprement

Page 3: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Sommaire

Partie 1: Coder propre

Partie 2: Noms significatifs

Partie 3: Fonctions

308/07/2019 coder proprement

Page 4: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Partie 1

Code propre

408/07/2019 coder proprement

Page 5: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Du code et du mauvais code

→Programmer : Préciser des exigences à un niveau de détail qui permet à un machine de les exécuter.

→Pour améliorer un mauvais code, il est recommandé d’utiliser les design pattern.

508/07/2019 coder proprement

Page 6: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Coût total du désordre

→Mal programmer coût cher en maintenance dans un projet ou dans un prochaine reprise de code.

→Les sources doivent être claire et selon unmodèle prévus dans l’entreprise pour unemaintenance pour de nouveaux développeurs.

608/07/2019 coder proprement

Page 7: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Partie 2

Noms significatifs

708/07/2019 coder proprement

Page 8: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Etat de l’art

→Tout au long notre développement, nousnommons les variables, les fonctions, lesarguments, les classes et les paquetages.

→Nous nommons aussi les fichiers sources et lesrépertoires qui le contiennent.

808/07/2019 coder proprement

Page 9: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Eviter la désinformation

• Il faut éviter les mots dont le sens établi varie du sens voulu.

• Eviter d’utiliser les mots clés des langages.

• Eviter de choisir des noms trop proches comme XYZController-ForEfficientHandlingsOfStrings dans un module et plus loin XYZControllerFor-EfficientHandlingsOfStrings dans un module.

908/07/2019 coder proprement

Page 10: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Faire des distinctions significatives

• Par exemple, puisqu’il est impossibled’employer le même nom pour faire référenceà deux choses différentes dans la mêmeportée, vous pourriez être tenté de remplacerl’un des noms de manière arbitraire. Pourcertains font une faute orthographe donc si lecompilateur corrige le mot donc pluscompilation .

1008/07/2019 coder proprement

Page 11: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Faire des distinctions significatives(2)

• L’emploi de mots de série comme (a1, a2, ..,aN) va entraîné une mal compréhension.

Dans des boucles ou dans la signature d’unefonction ou d’une méthode.

• Les articles dans les noms sont des parasitescomme (en anglais: a, an et the), enfrançais(un, une, le, les).

• Nous ne devons pas employer dans notrenommage le mot variable.

1108/07/2019 coder proprement

Page 12: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Choisir des noms prononçables

• Nous pouvons utiliser des mots nonprononçables sauf il faut une explication auxéquipes.

1208/07/2019 coder proprement

Page 13: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Evider la codification

• Une époque, la taille des noms de variablesétaient importants dues à la mémoire.

• On peut utiliser la notation hongroise ouautres notations.

• On peut maintenant préfixer les variables parm_, mais à éviter car cela peut être un fouillis.

1308/07/2019 coder proprement

Page 14: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Interface

• On peut préfixer une interface par I.

1408/07/2019 coder proprement

Page 15: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Noms de classes

• Pour les classes et les objets, nous devonschoisir des noms ou des groupes nominaux.

• Un nom de classe ne doit pas être un verbe.

1508/07/2019 coder proprement

Page 16: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Noms de méthodes

• Choisir des verbes ou des groupes verbauxcomme PostPayment, deletePage, ou save.

• Les accesseurs, les mutateurs, et les prédicatsdoivent être nommés d’après leur valeur etpréfixe par get, set ou is conformément austandard du langage.

1608/07/2019 coder proprement

Page 17: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Choisir un mot par concept

• Les noms doivent être autonomes etcohérents. Par exemple, mettre des termesselon action.

1708/07/2019 coder proprement

Page 18: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Eviter les jeux de mots

• Eviter les mots qui ont deux sens différents.

• On respectant la règle « un mot par concept ».

1808/07/2019 coder proprement

Page 19: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Partie 3

Fonctions

1908/07/2019 coder proprement

Page 20: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Faire court

• Une fonction efficace doit utiliser desméthodes et des fonctions déjà existants.

• Le mauvais code semble justifier lescommentaires. Mieux faire des fonctions parexemple pour une condition.

• Eviter de faire des fonctions avec trop designatures.

2008/07/2019 coder proprement

Page 21: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Partie 4

Bonnes pratiques du codage

2108/07/2019 coder proprement

Page 22: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Indentation

• Utilisez les tabulations pour écrire le code.

• Souvent l’indentation est fabriquéautomatiquement dans un IDE par espace.

• Si vous modifiez le code de quelqu’un d’autreessayez de garder le style de codage similaire.for (i = 0; i < 10; i++){

If ( !quelque chose (i))

continue;

do_more ();

}

2208/07/2019 coder proprement

Page 23: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Indentation(2)

• Les instructions de commutation ont la mêmecasse que le commutateur:

switch (x) {

case ‘a’ :

case ‘b’ :

}

2308/07/2019 coder proprement

Page 24: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Performance et lisibilité

• Performance et lisibilité sont étroitementinterdépendants et peuvent se résumer auxquatre axiomes qui suivent:

• Il est plus important d’être correct que d’être rapide.

• Un code rapide, difficile à maintenir, sera probablement ignoré.

• Un code bien écrit et documenté aura plus de chances d’être réutilisé.

2408/07/2019 coder proprement

Page 25: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Où mettre les espaces

• Utilisez un espace avant une parenthèsed’ouverture lors de l’appel de fonctions ou del’indexation, comme ceci:

method (a);

b [10];

Bien : Mauvais :

method (a); method ( a );

array [10]; array[ 10 ];

2508/07/2019 coder proprement

Page 26: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Où mettre les espaces (2)

• Mettre un espace entre les types génériques

Bien :

var list = new List<int> ();

Mauvais :

Var list = new List <int> ();

2608/07/2019 coder proprement

Page 27: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Où mettre des accolades

• Dans un bloc de code, placez l’accolades sur lamême ligne que l’instruction:

Bien : Mauvais :

if (a) { if (a)

code (); {

code (); code ();

} code ();

}

2708/07/2019 coder proprement

Page 28: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Où mettre des accolades(2)

• Evitez d’utiliser des accolades inutilesd’ouverture/fermeture, l’espace vertical estgénéralement limité :

Bien : Mauvais :

if (a) if (a) {

code (); code();

}

2808/07/2019 coder proprement

Page 29: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Où mettre des accolades(3)

• A moins que plusieurs conditions hiérarchiquessoient utilisées ou que la condition ne puisse pasêtre insérée dans une seule ligne.

Bien : Mauvais :

if (a) { if (a)

if (b) if (b)

code (); code ();

}

2908/07/2019 coder proprement

Page 30: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Où mettre des accolades(4)

• Lors d’une définition d’une méthode, utilisez lestyle C pour le placement des accolades, c’est-à-dire utilisez une nouvelle ligne pour l’accolade,comme ceci :

Bien : Mauvais :

void Method() void Method() {

{ }

}

3008/07/2019 coder proprement

Page 31: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Où mettre des accolades(5)

• Les propriétés et les indexeurs constituent uneexception. Conservez les accolades sur la mêmeligne que la déclaration de propriété.

Bien : Mauvais :int Property { int Property

get { {return value; get {

} return value;} }

}

3108/07/2019 coder proprement

Page 32: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Où mettre des accolades(6)

• On peut compresser accesseur et mutateur:

Bien :

int Property {

get {return value; }

set {x = value; }

}

3208/07/2019 coder proprement

Page 33: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Où mettre des accolades(7)

• Si le else est structuré comme suivant :Bien : Mauvais : Mauvais :if (truc) { if (truc) if (truc)

… { {} else { … …

… } }} else else {

{ …… }

}

3308/07/2019 coder proprement

Page 34: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Où mettre des accolades(8)

• Les classes et les espaces de noms fonctionnent comme lesinstructions if, différemment des méthodes :

Bien : Mauvais :namespace N { namespace N

class X { {… class X

} {} …

}}

3408/07/2019 coder proprement

Page 35: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Résumé

• Déclaration Position

Espace de noms même ligne

Type même ligne

Méthode nouvelle ligne

Propriété même ligne

Blocs de contrôle (si, pour, …) même ligne

Types et méthodes anonymes même ligne

3508/07/2019 coder proprement

Page 36: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Paramètres multilignes

• Lorsque vous devez écrire des paramètres sur plusieurslignes, indiquez les paramètres sous ma ligne précédente :

Bien : Mauvais :WriteLine (format, foo,

bar, baz);Les séparateurs vont à la fin:WriteLine(format, WriteLine(format

foo, , foobar, , barbaz); baz);

3608/07/2019 coder proprement

Page 37: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Utilisez des espaces pour plus de clarté

• Utilisez des espaces blancs dans lesexpressions, sauf en présence de parenthèses:

Bien :

if (a + 5 > method (blah () + 4))

Mauvais :

if (a+5>method(blah()+4))

3708/07/2019 coder proprement

Page 38: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Entête de fichiers

• Pour tout nouveau fichier, pensez à utiliser uneintroduction descriptive, comme ceci :

//// System.Comment.cs : commentaires intégrés aufichier de code//// Auteur :// Jean Martin ([email protected])//// Copyright (c) Entreprise

3808/07/2019 coder proprement

Page 39: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Commentaires

• Voir la norme du langage

3908/07/2019 coder proprement

Page 40: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Enveloppe

• Les noms d’argument doivent utiliser les identificateurs adéquats, comme ceci :Bien :

void Method (string myArgument)

Mauvais :void Method (string lpsrtArgument)void Method (string my_string)

Les champs d’instance doivent utiliser le soulignement comme séparateur :Bien : passable:class X { class X {

string my_string; string myString;int very_important_value; int veryImportantValue;

} }

4008/07/2019 coder proprement

Page 41: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Enveloppe (2)

Les champs d’instance doivent utiliser lesoulignement comme séparateur :

Bien : mauvais :

class X { class X {

string myString; string m_string;

int very_important_value; int _intVal;

} }

4108/07/2019 coder proprement

Page 42: Coder proprement - Accueil proprement.pdf · 08/07/2019 coder proprement 10 Faire des distinctions significatives(2) •L [emploide mots de série comme (a1, a2, .., aN) va entraîné

Référence

Cette partie s’est fortement inspiré du magazineCoding Magazine n°4#Mai/JUIN/JUILLET 2019.

4208/07/2019 coder proprement