Clean code, écrire du code de qualité - Partie 2

Bonjour, je suis Dimitri Dumont, développeur front-end freelance. Je suis passionné par les notions qui tournent autour du “software craftsmanship”.

J’ai récemment acheté le livre Clean Code — A Handbook of Agile Software Craftsmanship de Robert C. Martin (ou Uncle Bob). J’ai décidé de partager mes notes personnelles prises durant sa lecture.

Livre Clean code de Robert C. Martin

Si vous souhaitez lire la première partie, qui est l’introduction de la notion de “clean code”, vous pouvez la retrouver ici : cliquez-ici

Utilisez des noms significatifs

L’objectif de cette deuxième partie est de comprendre pourquoi il faut utiliser des noms significatifs et comment le faire. En tant que développeur, nous nommons constamment des variables, des fonctions, des classes, des objets, etc. Étant donné que nous le faisons très souvent et dans chaque projet, il est important de faire attention aux noms que nous utilisons.

Conseil n°1 : utilisez des noms qui révèlent l’intention

Pour commencer, il faut savoir que choisir un bon nom pour une variable, une classe ou tout autre élément dans un programme prend du temps. Il ne faut donc pas avoir peur de renommer vos variables durant votre projet lorsque vous en trouvez des meilleurs. Avec les IDE, vous pouvez très facilement renommer une variable sans vous soucier de son utilisation, l’IDE se chargera de la renommer lors de ses importations et de ses utilisations.

L’une des premières règles sur le nommage, c’est que le nom doit révéler ce que fait une fonction ou à quoi sert une variable.

Prenons un exemple, si vous souhaitez avoir une variable qui correspond à un utilisateur :

1 [object Object]

Maintenant, renommons cette variable pour qu’on puisse comprendre plus facilement son usage :

1 [object Object]

Ainsi, lorsque vous reviendrez sur cette partie de code ou lorsqu’un autre développeur travaillera dessus, il ne perdra pas de temps à comprendre cette variable.

Conseil n°2 : évitez la désinformation

Qu’est-ce que la déformation ? Imaginons que vous souhaitez déclarer une variable qui représente un groupe d’utilisateurs, il peut être tentant de nommer cette variable userList. Le problème ici, c’est qu’en utilisant le mot List vous pouvez laisser croire que cette variable est une liste au sens développement. On peut donc supposer que cette variable est un tableau par exemple, alors qu’au final, elle peut très bien être un objet qui contient des utilisateurs.

La solution est d’utiliser un nom qui n’a pas de signification sur son type : userGroup ou users.

Dans le livre, Robert C. Martin prend aussi l’exemple du 0. En fonction des polices utilisées par votre IDE, le zéro peut être interprété comme un o. La solution est tout simplement de renommer la variable 0 en zero.

Conseil n°3 : distinguez correctement vos noms

Vous ne devez pas avoir des noms qui se ressemblent. Par exemple pour des fonctions, évitez ça : getActiveCustomer(), getActiveCustomers(), getCustomerData() N’utilisez pas des termes techniques : variable, table, list, etc.

Conseil n°4 : utilisez des noms prononçables

Les noms que vous choisissez dans vos programmes seront prononcés régulièrement, que ce soit par vous ou par vos collègues. Utilisez donc des noms facilement prononçables comme meetingDate, meetingCustomer plutôt que mDt, mCtm.

Conseil n°5 : les noms doivent être facilement trouvables

Les noms qui sont composés d’uniquement un caractère, comme par exemple i, u et 0 sont difficilement trouvables au milieu du code. Uncle Bob conseille d’utiliser ce type de nom (un seul caractère) uniquement dans les petites méthodes. Vous pouvez garder par exemple le caractère i pour représenter l’index dans une boucle. Mais excepté ce cas précis, évitez les noms composés d’un seul caractère.

Conseil n°6 : n’utilisez pas des noms incompréhensibles

Il est inutile de perdre du temps à comprendre le nom de la variable, d’une fonction ou d’une classe. Choisissez des noms explicites et simples.

Conseil n°7 : n’utilisez pas de types dans les noms

Uncle Bob nomme le fait de nommer un élément dans le code avec son type, par exemple addressString comme dangereux pour la lecture, pour changer le nom plus tard et pour changer tout simplement l’élément.

Si vous développez en JavaScript par exemple, il peut être intéressant d’utiliser TypeScript pour typer vos objets et vos variables afin d’éviter ce genre de noms.

Conseil n°8 : utilisez des noms que d’autres personnes connaissent

Lorsque vous travaillez sur un projet, il est intéressant d’utiliser les mêmes termes et mots que les autres. Cela évitera aux autres développeurs de perdre du temps à essayer de comprendre le nom de chaque élément dans le code et ainsi de leur utilité. Vous pouvez pour cela, utilisez les termes du secteur du projet. Par exemple, si vous travaillez sur une application de gestion de rendez-vous, vous pouvez utiliser les termes suivants : meeting, appointment, contributor.

Conseil n°9 : nom des classes

Les noms des objets et des classes doivent être des noms ou des groupes de noms. Exemple : User, Customer, Meeting, Account, Car.

Conseil n°10 : nom des fonctions

Les noms des fonctions doivent contenir un verbe. Exemple : getActiveUsers(), deleteArticle(), updateAddress().

Conseil n°11 : choisissez un mot par concept

Lorsque vous choisissiez un mot pour un concept. Si par exemple pour récupérer des utilisateurs vous choisissiez le mot get pour la fonction getUsers(), n’utilisez pas le mot retrieve ou fetch dans d’autres noms.

Conseil n°12 : n’utilisez pas deux mêmes noms pour deux choses différentes

Si vous devez utiliser le même mot pour deux éléments différents, alors choisissez deux mots différents car ce ne sont pas les mêmes éléments.

Conclusion

Pour conclure sur cette deuxième partie, qui correspond au deuxième chapitre du livre Clean Code — A Handbook of Agile Software Craftsmanship de Robert C. Martin, le choix des noms que vous utilisez dans votre code est très important.

Plus un nom sera simple, explicite et réfléchi, plus vous gagnerez du temps à vous relire et à comprendre l’utilité d’une fonction, d’une variable ou d’une classe.

L’une des différences entre un développeur intelligent et un développeur professionnel c’est que le professionnel comprend que la clarté est maitresse. Les professionnels utilisent leurs forces pour écrire du code de qualité que les autres peuvent comprendre. Robert C. Martin — A Handbook for Agile Software Craftsmanship

Qui suis-je ?

En plus d'avoir accompagné plus d'une quarantaine de clients en tant que développeur front-end et de m'intéresser à la qualité de code, l'architecture ainsi que les technologies front-end, je suis passionné par l'entrepreneuriat et les investissements. C'est pourquoi j'ai décidé de créer ce blog.