Clean Code in C++: Prinzipien und Praxisbeispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Clean Code in C++: Prinzipien und Praxisbeispiele



Jeder C++-Entwickler stößt früher oder später auf das Problem der Wartung von eigenem oder fremdem Code. Komplexe Templates, überladene Funktionen und endlose Makros verwandeln das Projekt in einen Albtraum. Das Konzept von Clean Code, das von Robert Martin populär gemacht wurde, bietet einfache, aber effektive Regeln, die Code verständlich, sicher und leicht modifizierbar machen. In diesem Artikel werden wir die wichtigsten Clean-Code-Prinzipien in Bezug auf C++ erläutern und zeigen, wie man sie in der Praxis anwendet.



1. Namen von Variablen und Funktionen: Sagen Sie, was Sie tun



Die erste Regel von Clean Code ist, dass der Name die Absicht des Entwicklers offenbaren sollte. In C++ ist dies aufgrund der Fülle von Zeigern, Referenzen und Überladungen besonders wichtig.



Schlechtes Beispiel:

int d; // vergangene Zeit in Tagenvoid f(int* a, int n); // ???


Gutes Beispiel:

int daysSinceLastLogin;void processUserData(const std::vector<int>& userIds);


Verwenden Sie vollständige Wörter und vermeiden Sie einbuchstabige Variablen (außer für Indizes in kurzen Schleifen). Verwenden Sie für boolesche Variablen die Präfixe is, has, should:

bool isValidInput;bool hasPermissions;


Benennen Sie Klassen und Strukturen mit Substantiven und Funktionen mit Verben oder Verbkombinationen: class UserAccount, void calculateSalary().



2. Funktionen: Klein, mit einer einzigen Verantwortung



Eine Funktion sollte nur eine Sache tun und diese gut machen. Die maximale Länge beträgt 20-30 Zeilen. Wenn eine Funktion länger ist, teilen Sie sie in Hilfsfunktionen auf.



Schlechtes Beispiel (monolithische Funktion):

void processOrder(Order& order) {    // Zahlungsprüfung    // Lageraktualisierung    // E-Mail-Versand    // Protokollierung    // Quittungserstellung}


Gutes Beispiel (Dekomposition):

void processOrder(Order& order) {    if (!validatePayment(order)) return;    updateInventory(order);    sendConfirmationEmail(order);    logTransaction(order);    generateReceipt(order);}


Vermeiden Sie nach Möglichkeit Seiteneffekte. Eine Funktion sollte keine globalen Variablen oder per Referenz übergebenen Argumente ändern, ohne dies explizit im Namen anzugeben (resetData, fillBuffer).



3. Arbeit mit Speicher und Ressourcen: RAII und Smart Pointer



C++ bietet vollständige Kontrolle über den Speicher, was jedoch zu Lecks führen kann. Clean Code empfiehlt die Verwendung des RAII-Idioms (Resource Acquisition Is Initialization) und von Smart Pointern anstelle von rohem new/delete.



Schlechtes Beispiel (manuelle Verwaltung):

void process() {    int* data = new int[100];    // ... viel Code ...    if (error) {        delete[] data;        return;    }    delete[] data;}


Gutes Beispiel (RAII):

void process() {    std::unique_ptr<int[]> data = std::make_unique<int[]>(100);    // ... Code ...    // delete wird automatisch beim Verlassen des Gültigkeitsbereichs aufgerufen}


Verwenden Sie für gemeinsamen Besitz std::shared_ptr und für schwache Referenzen std::weak_ptr. Geben Sie niemals rohe Zeiger auf interne Daten zurück – verwenden Sie Referenzen oder Smart Pointer.



4. Fehlerbehandlung: Ausnahmen und Rückgabecodes



Clean Code erfordert eine explizite und vorhersagbare Fehlerbehandlung. In C++ gibt es zwei Hauptansätze: Ausnahmen und Rückgabecodes. Wählen Sie innerhalb eines Projekts einen Stil.



Schlechtes Beispiel (Ignorieren von Fehlern):

int divide(int a, int b) {    return a / b; // Division durch Null!}


Gutes Beispiel (Ausnahmen):

int divide(i                

Blogs

Buchempfehlungen