Qu'est-ce que le Clean Code ?
Le Clean Code (code propre) est un code lisible, simple et bien structure qui communique clairement son intention. Le concept a ete popularise par Robert C. Martin dans son livre "Clean Code: A Handbook of Agile Software Craftsmanship" (2008). Un code propre est facile a comprendre pour un autre developpeur (ou pour vous-meme dans six mois), facile a modifier sans introduire de bugs, et facile a tester.
Principes fondamentaux
Nommage expressif
Les noms de variables, fonctions et classes doivent reveler l'intention. Preferez getUsersByRole() a getData(). Evitez les abreviations obscures, les noms a une lettre (sauf les iterateurs), et les prefixes de type (strName, iCount). Un bon nom rend les commentaires inutiles. Les fonctions booleennes commencent par is, has, can, should.
Fonctions courtes et focalisees
Une fonction devrait faire une seule chose, la faire bien, et ne faire que cela. Visez 5-20 lignes maximum. Les parametres doivent etre limites (3 maximum, au-dela utilisez un objet). Le niveau d'abstraction doit etre uniforme dans une fonction (ne pas melanger logique metier et details d'implementation).
Pas de duplication (DRY)
Le principe DRY (Don't Repeat Yourself) recommande que chaque concept n'ait qu'une seule representation dans le code. La duplication est le signe qu'une abstraction manque. Attention cependant a ne pas forcer une abstraction prematuree : trois occurrences similaires justifient une factorisation, pas deux.
Commentaires et documentation
Le meilleur commentaire est un code qui n'en a pas besoin. Les commentaires pertinents expliquent le "pourquoi" (decision de design, contrainte metier), jamais le "quoi" (le code le montre deja). Les commentaires obsoletes sont pires qu'aucun commentaire. Les TODO sont acceptables temporairement. Les Javadoc/JSDoc sont utiles pour les API publiques.
Organisation du code
Les fichiers doivent etre courts et organises logiquement. Le principe du journal : les concepts importants et publics en haut, les details prives en bas. Les imports organises et regroupes. La coherence du style dans tout le projet (linting, formatage automatique). La loi de Demeter : un objet ne devrait appeler que les methodes de ses dependances directes, pas celles des objets retournes (eviter les chaines a.b().c().d()).