En cours de redaction
longue, code dupliqué, chaines de caracteres etranges, types de donnees, API, etc = difficile a comprendre trop d'operations, trop de niveau d'abstraction, plusieurs niveau d'imbrication
"et encore plus que ca"
25l 80c. 100l, 150c.
Moins de 20 lignes. 5 lignes
bloc et indentation : pas plus de 2 niveaux
"UNE FONCTION DOIT FAIRE UNE SEULE CHOSE. ELLE DOIT LA FAIRE BIEN ET NE FAIRE QU’ELLE."
1 niveau d'abstraction. Creer un nouvelle fonction ne fait que changer le nom
Pas de sections
- fonctions de la classe
- fonctiond d'autres classes
- fonction de la lib standard
Lire le code de haut en bas : la règle de décroissance
"nous employons évidemment le polymorphisme" -> langage specifique
Fabrique abstraite
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."
nom long > nom court
ideal = 0, 1 ou 2 = ok, plus de 3 = a eviter
preferer passer une variable comme membre, plutot que comme argument <= purete fonctionnelle ?
Difficulite pour tester <= encore plus dur de tester un etat interne ?
prefere retour de fonction plutot que argument de sortie. <= optional, monade, gestion d'erreur
-
Formes unaires classiques : retourner un bool ou un objet. Evenement = specifique a java?
-
Arguments indicateurs : a eviter
-
fonction diadique <= opposition fonction membre ou non, langage specifique
assertEquals(expected, actual) : ordre des parametres ? <= parametres nommé?
-
Fonctions triadiques : cumul de problemes
-
Objets en argument : concept qui mérite son propre nom
-
Listes d’arguments (string.format)
-
Verbes et mots-clés
assertExpectedEqualsActual(expected, actual) au lieu de assertEquals(expected, actual)
fait également d’autres choses cachées dans la classe ou dans les membres <= const, passage par valeur, purete fonctionnelle
couplage temporel
faire une chose ?
- Arguments de sortie : utilisation des membres. A proscrire, utiliser this pour la sortie
Une fonction doit modifier l’état d’un objet ou retourner des informations concernant cet objet
if (set("nomUtilisateur", "OncleBob"))... <= isSet, tester si un objet est valid. etentre le scope. C++17 declaration dans if. Pointeur C/C++
if (attributeExists("nomUtilisateur")) { setAttribute("nomUtilisateur", "OncleBob"); ... } <= verbosite
violation subtile de la séparation des commandes et des demande
-
Extraire les blocs try/catch <= séparation élégante ???
-
Traiter les erreurs est une chose
-
L’aimant à dépendances Error.java. Probleme de dependances
DRY, plus de code = plus d'erreurs
Dijkstra : chaque fonction, et chaque bloc dans une fonction, doit posséder une entrée et une sortie
apprendre de l'experience?
object vs fonctionnel. parametre vs membre. Typage fort