1. Aplica las directrices de Clean Code ✨

  • 📖 Código legible: escribe código fácil de leer y entender. Usa nombres significativos y un formato coherente.
  • 🔧 Funciones pequeñas: las funciones deben ser pequeñas y hacer una sola cosa.
  • 🚨 Gestión de errores: gestiona las excepciones con elegancia usando bloques try-catch y proporciona mensajes de error significativos.
  • ♻️ Evita la duplicación de código: extrae el código reutilizable a funciones o clases.

2. Estándares de codificación 📝

🔤 Convenciones de nombres

Sigue convenciones de nombres coherentes para clases, métodos, variables y recursos:

  • 📦 Clases: PascalCase
  • 🔧 Métodos y variables: camelCase
  • 🔒 Constantes: UPPER_SNAKE_CASE
  • 📁 Recursos: usa prefijos para mayor claridad (por ejemplo, activity_main.xml, ic_launcher.png)

🎨 Formato de código y linter

Adhiérete a las convenciones de codificación de Kotlin. Usa detekt para la comprobación automática del estilo de código y el análisis estático. Esta es la configuración de detekt.yml que usamos en nuestros proyectos:

# 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

🗒️ Documentación

Comentarios y documentación: escribe comentarios claros donde sea necesario, pero dale prioridad al código autoexplicativo. Usa KDoc para documentar funciones y clases complejas.

3. Aplica los principios SOLID 🛠️

  • Principio de responsabilidad única: cada clase o función debe tener una sola responsabilidad.
  • Principio de abierto/cerrado: el código debe estar abierto para su extensión pero cerrado para su modificación. Usa interfaces y clases abstractas para añadir funcionalidad sin alterar el código existente.
  • Principio de sustitución de Liskov: los subtipos deben ser sustituibles por sus tipos base sin afectar a la corrección.
  • Principio de segregación de interfaces: usa interfaces pequeñas y específicas en lugar de interfaces grandes y generales.
  • Principio de inversión de dependencias: depende de abstracciones, no de implementaciones concretas.