Kotlin para principiantes: 5 errores fatales y cómo evitarlos

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

Introducción: por qué Kotlin parece fácil, pero da sorpresas

\n\n

Kotlin es un lenguaje moderno, conciso e increíblemente conveniente. Muchos principiantes vienen de Java o Python y piensan: «¡Bueno, aquí todo está claro!». Y ciertamente, la sintaxis de Kotlin es limpia, los tipos nullable protegen contra NPE, y las características funcionales como let, apply y run parecen mágicamente simples. Pero es precisamente esta aparente simplicidad la que a menudo se convierte en una trampa.

\n\n

En este artículo, analizaremos los errores más comunes al aprender Kotlin que cometen los principiantes. Aprenderá cómo evitarlos y obtendrá ejemplos de código listos para usar. Si recién está comenzando su camino en el aprendizaje de Kotlin para principiantes, este artículo le ahorrará muchas horas de depuración.

\n\n

Error n.º 1: Ignorar la seguridad contra nulos o, por el contrario, tener paranoia

\n\n

Kotlin incorpora la seguridad contra nulos directamente en el sistema de tipos. Esto es una bendición, pero los principiantes a menudo caen en dos extremos. El primero es la ignorancia total y el uso del operador !! (aserción not-null) a cada paso. El segundo es el uso excesivo del operador Elvis ?: y cadenas de ?.let que convierten el código en una mezcla ilegible.

\n\n

Cómo se ve el error

\n\n
// Mal: !! total — mata toda la seguridad de Kotlin\nfun processUser(user: User?) {\n    val name = user!!.name  // Si user == null — ¡crash!\n    println(name.uppercase())\n}\n\n// Mal: demasiados let anidados\nfun getUserCity(user: User?): String? {\n    return user?.let {\n        it.address?.let { addr ->\n            addr.city?.let { city ->\n                city.name\n            }\n        }\n    }\n}\n
\n\n

Cómo hacerlo correctamente

\n\n
// Bien: usamos llamada segura + Elvis\nfun processUserSafe(user: User?) {\n    val name = user?.name ?: "Invitado"\n    println(name.uppercase())\n}\n\n// Excelente: extensiones y funciones de ámbito sin zoológico de anidación\nfun getUserCityClean(user: User?): String? {\n    return user?.address?.city?.name\n}\n
\n\n

Consejo: Use el operador !! solo si está 100% seguro de que el valor no es null (por ejemplo, después de una comprobación en un if). En otros casos, use ?. y ?:.

\n\n

Este es uno de los principales problemas de los principiantes en Kotlin: o le temen a null o no entienden cómo trabajar con él. Recuerde: Kotlin no prohíbe null, le obliga a pensar en él.

\n\n

Error n.º 2: No entender la diferencia entre var, val y constantes

\n\n

Parece que val es una variable final, como final en Java. Pero no. val es una referencia de solo lectura, no un objeto inmutable. Los principiantes a menudo confunden val con una constante en tiempo de compilación (const val) y se sorprenden de que su código no funcione como esperan.

\n\n

Ejemplo de confusión

\n\n
// El principiante piensa: "val = inmutable"\nval list = mutableListOf(1, 2, 3)\nlist.add(4)  // ¡Funciona! Pero el principiante se sorprende\n\n// Esto ya es un error de compilación\nval name = "Alice"\nname = "Bob"  // Error: val no puede ser reasignado\n
\n\n

Cómo diferenciarlos

\n\n
// Constante en tiempo de compilación — solo para primitivos y String\nconst val PI = 3.14159\n\n// Referencia de solo lectura — puede calcularse en tiempo de ejecución\nval currentTime = System.currentTimeMillis()\n\n// Verdadera inmutabilidad — use colecciones inmutables\nval immutableList = listOf(1, 2, 3)  // listOf, no mutableListOf\n
\n\n

Regla de oro: Use val siempre que sea posible. Si la variable debe cambiar, entonces use var. Y const val solo para constantes de nivel superior o dentro de object/companion object.

\n\n

Error n.º 3: Abuso de companion object y singletons con object

\n\n

Kotlin ofrece una forma elegante de crear singletons a través de ob

Blogs

Book Recommendations