1. Apply Clean Code guidelines ✨

  • 📖 Code lisible : Écrivez du code facile à lire et à comprendre. Utilisez des noms significatifs et un formatage cohérent.
  • 🔧 Fonctions courtes : Les fonctions doivent être courtes et ne faire qu’une seule chose.
  • 🚨 Gestion des erreurs : Gérez les exceptions de manière appropriée en utilisant des blocs try-catch et fournissez des messages d’erreur pertinents.
  • ♻️ Évitez la duplication de code : Extrayez le code réutilisable dans des fonctions ou des classes.

2. Coding standards 📝

🔤 Conventions de nommage

Suivez des conventions de nommage cohérentes pour les classes, méthodes, variables et ressources :

  • 📦 Classes : PascalCase
  • 🔧 Méthodes & variables : camelCase
  • 🔒 Constantes : UPPER_SNAKE_CASE
  • 📁 Ressources : Utilisez des préfixes pour plus de clarté (par ex., activity_main.xml, ic_launcher.png)

🎨 Formatage du code & linter

Respectez les conventions de codage Kotlin. Utilisez detekt pour la vérification automatique du style de code et l’analyse statique. Voici la configuration detekt.yml que nous utilisons dans nos projets :

# 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

🗒️ Documentation

Commentaires et documentation : Rédigez des commentaires clairs lorsque nécessaire, mais privilégiez du code auto-explicatif. Utilisez KDoc pour documenter les fonctions et classes complexes.

3. Apply the SOLID principles 🛠️

  • Principe de responsabilité unique : Chaque classe ou fonction doit avoir une seule responsabilité.
  • Principe ouvert/fermé : Le code doit être ouvert à l’extension mais fermé à la modification. Utilisez des interfaces et des classes abstraites pour ajouter des fonctionnalités sans modifier le code existant.
  • Principe de substitution de Liskov : Les sous-types doivent pouvoir être substitués à leurs types de base sans affecter la correction.
  • Principe de ségrégation des interfaces : Utilisez des interfaces petites et spécifiques plutôt que des interfaces larges et générales.
  • Principe d’inversion des dépendances : Dépendre des abstractions plutôt que d’implémentations concrètes.