Combien de fois vous est-il arrivé de comprendre du premier coup d’œil le code écrit par d’autres ?
Probablement pas souvent. Vous devez vous plonger dans le code pour comprendre ce qui se passe et le parcourir plusieurs fois.
Même ainsi, il se peut que vous ne compreniez pas la fonctionnalité du code.
Que pouvez-vous faire pour éviter de telles situations ?
C’est là que le code propre vient à la rescousse.
Le code propre vous encourage à écrire du code qui fonctionne et qui est facile à comprendre par les autres développeurs.
Par exemple :
function city(a, b) { print('I am moving from city', a,'to', b) }
Dans quelle mesure comprenez-vous la tâche que la fonction accomplit à première vue ?
Le nom de la fonction n’est pas assez descriptif pour décrire son intention. Les noms des variables ne sont pas non plus significatifs.
Comparez l’extrait de code ci-dessus avec celui-ci :
function printCity(fromCity, toCity) { print('I am moving from city', fromCity ,'to', toCity) }
Ici, le nom de la fonction est explicite, et les noms des variables nous donnent des indices que les villes indiquent le début et la fin de quelque chose.
Le code cryptique est devenu beaucoup plus lisible simplement en changeant les noms.
Un code aussi facile à lire facilite la vie des autres développeurs et vous aide également à déboguer.
Si vous voulez rendre votre code significatif, maintenable et lisible, voici quelques règles à garder à l’esprit lorsque vous le nommez.
Conventions de dénomination pour un code propre
Maintenant que nous avons passé en revue l’importance d’un code propre, examinons quelques conventions de dénomination pour vous aider à écrire un code lisible.
Les conventions décrites ici sont indépendantes du langage de programmation que vous utilisez.
Elles fonctionnent en parallèle avec les conventions décrites pour le langage de programmation dans lequel vous codez.
Règle 1 : Utilisez des noms ou des phrases courtes avec des adjectifs pour nommer les variables
Dans la plupart des langages de programmation, les variables ne sont rien d’autre que des conteneurs de données.
Elles contiennent des données à stocker ou à traiter.
Il est conseillé de les nommer avec des noms ou des phrases courtes avec des adjectifs pour clarifier la signification des données stockées.
Par exemple
let f = {} ;
Ici, le nom de la variable ‘f
‘ ne nous dit rien sur les données stockées.
Que signifie ‘f
‘ ici ? Des détails sur le client, sur le produit ou autre chose ?
Nous n’en avons aucune idée.
Mais si nous devions y stocker des informations sur un utilisateur, nous pourrions la nommer comme suit
let user = {} ;
Nous pourrions également utiliser des noms comme ‘userData’ mais, comme nous utilisons des objets pour stocker des données, l’ajout du mot ‘data’ n’ajoute aucune valeur au nom.
Essayez d’éviter autant que possible la redondance dans les noms.
Comprenez si l’ajout d’un mot supplémentaire au nom ajoutera de la valeur.
Règle 2 : Les noms des booléens doivent donner une réponse par oui ou par non
Voyons un exemple,
if(login) { // do something }
Ici, login est un booléen, mais le nom de la variable n’est pas suffisamment clair pour que l’on puisse en déduire une signification.
Que signifie « login » ? L’action de se connecter ? L’utilisateur s’est-il connecté ?
Nous ne pouvons pas comprendre.
Nous pourrions plutôt la nommer comme suit
if(isLoggedIn){ // do something }
Ici, le nom de la variable est suffisamment significatif pour conclure qu’elle signale si l’utilisateur est connecté. La réponse à la question « L’utilisateur est-il connecté ? » peut être un oui ou un non.
Les booléens ont une nature on/off. En tant que tels, leurs noms doivent refléter leur caractère.
Règle 3 : Utilisez des verbes ou des phrases courtes avec des adjectifs pour nommer les fonctions ou les méthodes
Les fonctions sont les exécutants des langages de programmation.
Elles agissent comme une commande pour exécuter quelque chose et peuvent renvoyer un résultat.
Dans une langue, les verbes sont des mots d’action.
Il est donc logique de nommer les fonctions avec des verbes, car ils décrivent l’action qu’elles doivent exécuter.
Par exemple
function getUser() { // do something and return user; }
Le verbe « get » nous indique ici que la fonction va obtenir les détails de l’utilisateur.
Elle peut le faire par le biais d’une requête réseau ou en les récupérant dans une base de données.
Dans tous les cas, nous pouvons conclure que la fonction va « obtenir » les données de l’utilisateur.
Nous pouvons également utiliser ‘fetchUser’ ici. La seule condition est d’utiliser le même verbe, c’est-à-dire « fetch », pour toutes les fonctions, ce qui implique qu’elles obtiennent des données. Pour mieux comprendre, examinons un extrait de code.
function getUser(){ // do something return user; } function fetchAdmin(){ // do something return admin; }
Nous avons les fonctions ‘getUser’ et ‘fetchAdmin’ dans l’exemple de code ci-dessus.
Toutes deux effectuent la même tâche, à savoir obtenir les détails de l’utilisateur, mais utilisent des verbes différents.
Dans ce cas, il est essentiel d’utiliser soit « get » soit « fetch » comme mot d’action pour les deux fonctions afin d’éviter toute confusion.
Évitez les incohérences lorsque vous utilisez des verbes pour nommer les fonctions et contentez-vous d’utiliser les mêmes verbes pour les mêmes actions.
Règle 4 : Utilisez des noms ou des phrases courtes avec des noms pour nommer les classes
Dans la plupart des langages de programmation, les classes instancient quelque chose.
Il peut s’agir d’un utilisateur, d’un produit, d’un examen, etc.
Il est conseillé d’utiliser des noms pour décrire les choses instanciées pour nommer les classes.
Prenons un exemple :
class User { const firstName ; const age ; const email ; }
L’extrait de code ci-dessus définit une classe User qui s’instancie comme :
let user = new User() ;
Ici, le nom ‘User
‘ est suffisamment significatif pour comprendre qu’il instancie un utilisateur.
Nous pourrions utiliser des noms comme « AppUser », mais le mot « App » n’apporte aucune valeur ajoutée. Chaque utilisateur est un utilisateur d’application, alors que signifie ‘AppUser’ ?
En suivant la règle énoncée précédemment, évitez toute redondance lorsque vous nommez vos variables, fonctions ou classes.
Un autre exemple,
Si une classe est responsable de la connexion à la base de données, nommez la classe Database au lieu d’utiliser des noms comme DatabaseManager.
Le mot « Manager » déforme la signification de la classe Database.
Gestionnaire de quoi ? L’utilisateur est-il un « DatabaseManager » ?
Pour éviter toute confusion, veillez à utiliser des substantifs et réfléchissez avant d’ajouter un mot supplémentaire au nom.
Apporte-t-il une valeur ajoutée ou rend-il la signification plus floue ?
Conclusion
J’espère que les conseils fournis vous aideront à écrire un code plus propre à l’avenir et vous faciliteront la vie.
Si vous avez des questions ou des commentaires, n’hésitez pas à les ajouter dans les sections de commentaires ci-dessous.
En attendant, bon codage !
Référence: Clean Code de Robert C. Martin