Introduction : Pourquoi un code propre est la clé d'un projet réussi
Un jour ou l'autre, tout développeur rencontre du code "sale" : des noms de variables sans signification, des fonctions de plusieurs centaines de lignes, des blocs répétitifs et des nombres magiques. Un tel code est difficile à lire, difficile à maintenir et quasiment impossible à étendre sans risquer de casser toute l'application. Le livre de Robert Martin "Clean Code" est devenu une bible pour les programmeurs cherchant à écrire du code de qualité. Dans cet article, nous allons décomposer les principes clés du Clean Code en Java avec des exemples clairs qui vous aideront à rendre votre code compréhensible, fiable et facile à maintenir.
1. Nommage : Parlez le langage du métier
Un nom de variable, de méthode ou de classe doit répondre aux questions : "Qu'est-ce que c'est ?" et "Pourquoi est-ce nécessaire ?". Évitez les abréviations d'une seule lettre et les termes abstraits.
Mauvais exemple
int d; // temps depuis la commande (en jours)List<String> lst = new ArrayList<>();void prc() { ... }Bon exemple
int joursDepuisCommande;List<String> nomsClients = new ArrayList<>();void traiterPaiement() { ... }Recommandations supplémentaires
- Classes — des noms :
Commande,RepositoryClient. - Méthodes — des verbes ou paires de verbes :
sauvegarderCommande(),estEmailValide(). - Évitez les mots "parasites" :
Données,Info,Gestionnaire— s'ils n'apportent pas de sens.
2. Fonctions : Courtes, Claires, Une Seule Tâche
Une fonction ne devrait faire qu'une seule chose et la faire bien. La longueur idéale est de 10 à 15 lignes. Si une fonction ne tient pas sur l'écran — divisez-la.
Mauvais exemple : Fonction couteau suisse
public void traiterCommande(Commande commande) { // 1. Validation if (commande == null || commande.getArticles().isEmpty()) { throw new IllegalArgumentException("Commande invalide"); } // 2. Calcul de la remise double remise = 0; if (commande.getTotal() > 1000) remise = 0.1; // 3. Sauvegarde en BDD baseDeDonnees.sauvegarder(commande); // 4. Envoi d'email serviceEmail.envoyerConfirmation(commande.getEmailClient());}Bon exemple : Séparation des responsabilités
public void traiterCommande(Commande commande) { validerCommande(commande); appliquerRemise(commande); persisterCommande(commande); notifierClient(commande);}
private void validerCommande(Commande commande) { if (commande == null || commande.getArticles().isEmpty()) { throw new IllegalArgumentException("Commande invalide"); }}
private void appliquerRemise(Commande commande) { if (commande.getTotal() > 1000) { commande.setRemise(0.1); }}
private void persisterCommande(Commande commande) { baseDeDonnees.sauvegarder(commande);}
private void notifierClient(Commande commande) { serviceEmail.envoyerConfirmation(commande.getEmailClient());}3. Évitez la Duplication (DRY) et les Nombres Magiques
Le code répétitif est le principal ennemi de la maintenabilité. Si vous copiez un bloc de code, il est temps de l'extraire dans une méthode ou une constante séparée.
Problème : Nombres magiques
if (age > 18) { ... } // Qu'est-ce que 18 ? Âge minimum ? Seuil de remise ?Solution : Constantes nommées
private static final int AGE_MINIMUM_CONDUITE = 18;// ...if (age > AGE_MINIMUM_CONDUITE) { ... }Exemple de duplication
// Mauvaisdouble totalPremier = prix1 * quantite1 * 0.95;double totalSecond = prix2 * quantite2 * 0.95;
// BONDouble calculerTotalLigne(double prix, int quantite) { return prix * quantite * 0.95;}double totalPremier = calculerTotalLigne(prix1, quantite1);double totalSecond = calculerTotalLigne(prix2, quantite2);
Blogs
Book Recommendations
Lire aussi
Fonctions Serverless en Java : AWS Lambda de A à Z
Programmation asynchrone en Rust : guide complet avec exemples
Parsing et scraping de données en PHP : du simple au professionnel
Authentification sécurisée en Java : comment ne pas échouer l'examen de sécurité
Travailler avec les dates et l'heure en JavaScript : guide complet pour Node.js
Blogs
Book Recommendations
Lire aussi
Travailler avec les dates et l'heure en JavaScript : guide complet pour Node.js