Clean Code en C++ : principes et exemples pratiques

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 le code propre est important en C++

\n\n

C++ est un langage puissant et flexible qui permet d'écrire à la fois du code système très performant et des solutions applicatives complexes. Cependant, cette flexibilité se transforme souvent en chaos : les fonctions surchargées, les conversions implicites, la gestion manuelle de la mémoire et les macros peuvent transformer un projet en « marécage » en quelques mois. Le concept de Clean Code (code propre), popularisé par Robert Martin, s'applique pleinement au C++, mais en tenant compte des spécificités du langage.

\n\n

Dans cet article, nous analyserons les principes clés du code propre en C++ et montrerons leur application sur des exemples concrets. Vous apprendrez à écrire un code facile à lire, à tester et à maintenir.

\n\n

1. Nommage et structure : la base de la lisibilité

\n\n

1.1. Noms significatifs pour les variables et les fonctions

\n\n

La première règle du code propre est que le nom doit révéler l'intention. En C++, c'est particulièrement important en raison de la présence de surcharges et de templates.

\n\n

Mauvais exemple :

\n\n
int d; // elapsed time in days\nvoid proc(int a, int b); // que sont a et b ?
\n\n

Bon exemple :

\n\n
int elapsedTimeInDays;\nvoid processData(const std::vector<int>& inputData, int maxIterations);
\n\n

1.2. Classes et espaces de noms

\n\n

Utilisez les espaces de noms pour le regroupement logique. Évitez les variables globales — c'est un anti-patron.

\n\n
namespace network {\n    class TcpConnection {\n    public:\n        void connect(const std::string& host, int port);\n        void send(const std::vector<char>& data);\n    private:\n        int socket_;\n    };\n} // namespace network
\n\n

2. Fonctions : petites et avec une seule responsabilité

\n\n

2.1. Principe de responsabilité unique (SRP)

\n\n

Une fonction ne doit faire qu'une seule chose. Si une fonction fait plus d'une action, divisez-la.

\n\n

Mauvais exemple :

\n\n
void processOrder(Order& order) {\n    // validation\n    if (order.total < 0) throw std::invalid_argument("Negative total");\n    // sauvegarde en BDD\n    database.save(order);\n    // envoi d'email\n    emailService.send(order.customerEmail, "Order confirmed");\n}
\n\n

Bon exemple :

\n\n
bool validateOrder(const Order& order);\nvoid saveOrderToDatabase(const Order& order);\nvoid sendConfirmationEmail(const Order& order);\n\nvoid processOrder(Order& order) {\n    if (!validateOrder(order)) return;\n    saveOrderToDatabase(order);\n    sendConfirmationEmail(order);\n}
\n\n

2.2. Évitez les effets de bord

\n\n

Une fonction ne doit pas modifier l'état global sans nécessité explicite. Utilisez des références constantes et retournez des valeurs, plutôt que de modifier les arguments.

\n\n
// Mauvais : modifie le vecteur d'entrée\nvoid addPrefix(std::vector<std::string>& words, const std::string& prefix) {\n    for (auto& word : words) {\n        word = prefix + word;\n    }\n}\n\n// Bon : retourne un nouveau vecteur\nstd::vector<std::string> addPrefix(const std::vector<std::string>& words, const std::string& prefix) {\n    std::vector<std::string> result;\n    result.reserve(words.size());\n    for (const auto& word : words) {\n        result.push_back(prefix + word);\n    }\n    return result;\n}
\n\n

3. Gestion de la mémoire et RAII

\n\n

3.1. Utilisez les pointeurs intelligents

\n\n

En C++ moderne (C++11 et versions ultérieures), la gestion manuelle de la mémoire via new/delete est considérée comme obsolète. Utilisez std::unique_ptr et std::shared_ptr.

\n\n
// Mauvais : fuite mémoire possible\nvoid process() {\n    Resource* res = new Resource();\n    // ... si une exception survient ici, la mémoire fuit\n    delete res;\n}\n\n// Bon : libération automatique\nvoid process() {\n    a                

Blogs

Book Recommendations