Fonctions – Coder proprement

Corps de la fonction

Ne pas se répéter

Faire court (max 20 lignes)

Faire une seule chose

Ne pas mélanger les niveaux abstractions

Utiliser la règle décroissante : chaque fonction se décrit par un paragraphe décrivant le niveau d’abstraction (en lisant de haut en bas)

Pour inclure les pages de montage et de démontage, nous incluons le montage, puis le contenu de la page de test et enfin le démontage.
Pour inclure le montage, nous incluons le montage d’une suite s’il s’agit d’une suite, puis nous incluons le montage normal.
Pour inclure le montage d’une suite, nous recherchons la page “SuiteSetUp” dans la hiérarchie parente et nous incluons une instruction avec le chemin de cette page.
Pour rechercher le parent…

L’instruction switch ne doit apparaître qu’une seule fois dans la classe la plus haute

Respecter le principe ouvert/fermé : ouvert à l’extension mais fermé à la modification (https://fr.wikipedia.org/wiki/Principe_ouvert/ferm%C3%A9)

Respecter le principe de responsabilité unique : une fonction ne doit être modifié que pour une seule raison pas plus. (https://en.wikipedia.org/wiki/Single_responsibility_principle)

Séparer commandes (faire quelque chose) et demandes (répondre quelque chose)

Nom de la fonction

Utiliser la forme verbe + nom

Il est possible de mettre l’ordre des arguments dans le nom de la fonction

Noms descriptifs et si besoin long : includeSetupAndTeardownPages, includeSetupPages, includeSuiteSetupPage
et includeSetupPage
C’est le principe de Ward : “Vous savez que vous travaillez avec du code propre lorsque chaque fonction que vous lisez correspond presque parfaitement à ce que vous attendiez.”

Arguments de la fonction

Le mieux c’est de ne pas en avoir, le pire est d’en avoir plus de trois (à proscire)

Eviter les arguments indicateurs (bool), pour cela décomposer en 2-n fonctions

Utiliser des objets pour grouper des arguments en un seul

Le nombre variables d’arguments est toujours possible mais pas plus de trois dans la signature de la fonction

Retour de la fonction

Les arguments de sortie sont à proscrire

Utiliser les exceptions

Mettre les bloc try/catch dans leurs propres fonctions (try premier mot et catch/finally dernier mot)