Clean Code en Kotlin: principios y ejemplos para principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Clean Code en Kotlin: principios y ejemplos para principiantes



El código limpio (Clean Code) no es solo un término de moda, sino una habilidad fundamental de cualquier desarrollador. En el lenguaje Kotlin, que combina concisión y potencia, escribir código legible y mantenible se vuelve especialmente importante. En este artículo, analizaremos los principios clave de Clean Code aplicados a Kotlin, proporcionaremos ejemplos prácticos y mostraremos cómo evitar errores típicos. El material está dirigido a desarrolladores principiantes que desean escribir código profesional desde el primer día.



1. Nomenclatura de variables, funciones y clases



La nomenclatura correcta es la base del código limpio. El nombre debe responder a las preguntas: "¿Qué es esto?" y "¿Para qué sirve?". En Kotlin se utiliza camelCase para variables y funciones, y PascalCase para clases y objetos.



Ejemplo incorrecto:

val x = 5fun calc(a: Int, b: Int): Int {    return a * b + 10}


Ejemplo correcto:

val maxRetryCount = 5fun calculateTotalPrice(basePrice: Int, tax: Int): Int {    return basePrice + tax}


Reglas clave:

  • Evite abreviaturas — es mejor reemplazar usr por user, y calc por calculate.
  • Use verbos para funciones — getUser(), sendEmail(), validateInput().
  • Las variables booleanas nómbrelas con prefijos is, has, can — isActive, hasPermission.
  • Evite información innecesaria — userList es mejor que listOfUsersFromDatabase.


2. Principios SOLID en Kotlin



SOLID son cinco principios de la programación orientada a objetos que ayudan a crear sistemas flexibles y fáciles de mantener. Veámoslos con ejemplos en Kotlin.



Single Responsibility (Responsabilidad Única)

Una clase debe tener una sola razón para cambiar. Divida la lógica en clases pequeñas y especializadas.



Ejemplo incorrecto:

class UserManager {    fun saveUser(user: User) { /* guardar en BD */ }    fun sendEmail(user: User) { /* enviar correo */ }    fun printReport(user: User) { /* imprimir informe */ }}


Ejemplo correcto:

class UserRepository {    fun save(user: User) { /* guardar en BD */ }}

class EmailService { fun send(user: User) { /* enviar correo */ }}

class ReportPrinter { fun print(user: User) { /* imprimir informe */ }}


Open/Closed (Abierto/Cerrado)

Las clases deben estar abiertas para extensión, pero cerradas para modificación. Use interfaces y herencia.



interface Shape {    fun area(): Double}

class Circle(val radius: Double) : Shape { override fun area() = Math.PI * radius * radius}

class Rectangle(val width: Double, val height: Double) : Shape { override fun area() = width * height}

// Ahora se pueden agregar nuevas figuras sin cambiar el código existente


Liskov Substitution (Sustitución de Liskov)

Los objetos de las subclases deben poder reemplazar objetos de la clase base sin alterar la lógica. En Kotlin, esto es especialmente relevante al trabajar con colecciones y herencia.



open class Bird {    open fun fly() = "Vuela"}

class Penguin : Bird() { override fun fly() = throw UnsupportedOperationException("Los pingüinos no vuelan")}// Esto viola el principio: es mejor mover la "capacidad de volar" a una interfaz separada


3. Trabajo con funciones: concisión y limpieza



Kotlin ofrece herramientas potentes para escribir funciones limpias. Reglas principales: