1. Clean-Code-Richtlinien anwenden ✨

  • 📖 Lesbarer Code: Schreiben Sie Code, der leicht zu lesen und zu verstehen ist. Verwenden Sie aussagekräftige Namen und eine einheitliche Formatierung.
  • 🔧 Kleine Funktionen: Funktionen sollten klein sein und nur eine Sache tun.
  • 🚨 Fehlerbehandlung: Behandeln Sie Ausnahmen elegant mit try-catch-Blöcken und geben Sie aussagekräftige Fehlermeldungen aus.
  • ♻️ Codeduplizierung vermeiden: Extrahieren Sie wiederverwendbaren Code in Funktionen oder Klassen.

2. Programmierstandards 📝

🔤 Namenskonventionen

Befolgen Sie einheitliche Namenskonventionen für Klassen, Methoden, Variablen und Ressourcen:

  • 📦 Klassen: PascalCase
  • 🔧 Methoden & Variablen: camelCase
  • 🔒 Konstanten: UPPER_SNAKE_CASE
  • 📁 Ressourcen: Verwenden Sie Präfixe zur besseren Übersicht (z. B. activity_main.xml, ic_launcher.png)

🎨 Codeformatierung & Linter

Halten Sie sich an die Kotlin-Programmierkonventionen. Verwenden Sie detekt zur automatischen Prüfung des Codestils und zur statischen Analyse. Hier ist die detekt.yml-Konfiguration, die wir für unsere Projekte verwenden:

# Naming rules
naming:
  ConstructorParameterNaming:
    active: false
  VariableNaming:
    active: false

# Style rules
style:
  ForbiddenComment:
    active: false
  MaxLineLength:
    active: true
    maxLineLength: 120

# Complexity rules
complexity:
  TooManyFunctions:
    ignorePrivate: true

🗒️ Dokumentation

Kommentare und Dokumentation: Schreiben Sie klare Kommentare, wo nötig, aber bevorzugen Sie selbsterklärenden Code. Verwenden Sie KDoc zur Dokumentation komplexer Funktionen und Klassen.

3. SOLID-Prinzipien anwenden 🛠️

  • Single-Responsibility-Prinzip: Jede Klasse oder Funktion sollte eine Verantwortlichkeit haben.
  • Open/Closed-Prinzip: Code sollte offen für Erweiterungen, aber geschlossen für Änderungen sein. Verwenden Sie Schnittstellen und abstrakte Klassen, um Funktionalität hinzuzufügen, ohne bestehenden Code zu verändern.
  • Liskov-Substitutionsprinzip: Subtypen müssen für ihre Basistypen einsetzbar sein, ohne die Korrektheit zu beeinträchtigen.
  • Interface-Segregation-Prinzip: Verwenden Sie kleine, spezifische Schnittstellen statt großer, allgemeiner.
  • Dependency-Inversion-Prinzip: Hängen Sie von Abstraktionen ab und nicht von konkreten Implementierungen.