Clean Code en Java : principes d'écriture de code propre avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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