Skip to content

Cheat Sheet de Kotlin

Última verificación mayo 2026 — corre en tu navegador
Cheatsheet de Kotlin
val name = "Alice"

Variable inmutable (inferida)

Básicos
var age = 30

Variable mutable

Básicos
val PI: Double = 3.14

Variable con tipo explícito

Básicos
const val VERSION = "1.0"

Constante de compilación (top-level/object)

Básicos
Int Long Float Double Boolean Char String

Tipos integrados

Básicos
val msg = "Hello, $name!"

Plantilla de string

Básicos
val sum = "Sum: ${a + b}"

Plantilla con expresión

Básicos
val text = """Multi-line
string"""

String multilínea raw

Básicos
if (x > 0) { ... } else if (x == 0) { ... } else { ... }

If/else

Básicos
val result = if (a > b) a else b

If como expresión

Básicos
for (i in 1..10) { ... }

For con rango

Básicos
for (i in 1..10 step 2) { ... }

Rango con step

Básicos
for (i in 10 downTo 1) { ... }

Rango descendente

Básicos
for (item in list) { ... }

Bucle for-in

Básicos
list.forEach { println(it) }

forEach con it implícito

Básicos
when (x) {
  1 -> ...
  in 2..5 -> ...
  else -> ...
}

Expresión when (switch)

Básicos
val name: String? = null

Tipo nullable

Seguridad de nulos
name?.length

Operador safe call

Seguridad de nulos
name ?: "unknown"

Operador Elvis (default si null)

Seguridad de nulos
name!!

Aserción no-null (lanza si null)

Seguridad de nulos
name?.let { println(it) }

Ejecutar bloque si no es null

Seguridad de nulos
val len = name?.length ?: 0

Safe call + elvis

Seguridad de nulos
fun add(a: Int, b: Int): Int = a + b

Función de una expresión

Funciones
fun greet(name: String) {
  println("Hi $name")
}

Función con bloque

Funciones
fun greet(name: String = "World") {}

Parámetro por defecto

Funciones
greet(name = "Alice")

Llamada con argumento nombrado

Funciones
fun sum(vararg nums: Int): Int = nums.sum()

Varargs

Funciones
val multiply = { a: Int, b: Int -> a * b }

Expresión lambda

Funciones
fun String.shout() = this.uppercase()

Función de extensión

Funciones
inline fun <T> measure(block: () -> T): T = block()

Higher-order inline

Funciones
class User(val name: String, var age: Int)

Constructor primario

Clases
data class User(val id: Int, val name: String)

Data class (equals/hash/toString)

Clases
val (id, name) = user

Desestructurar data class

Clases
class User {
  init { println("created") }
}

Bloque init

Clases
open class Animal
class Dog : Animal()

Herencia (requiere open)

Clases
interface Clickable { fun click() }

Interfaz

Clases
sealed class Result

Sealed class (jerarquía restringida)

Clases
enum class Color { RED, GREEN, BLUE }

Clase enum

Clases
object Singleton { val config = ... }

Declaración object (singleton)

Clases
companion object { fun create() = ... }

Companion object (estático)

Clases
val list = listOf(1, 2, 3)

Lista inmutable

Colecciones
val list = mutableListOf(1, 2, 3)

Lista mutable

Colecciones
val map = mapOf("a" to 1, "b" to 2)

Map inmutable

Colecciones
val set = setOf(1, 2, 3)

Set inmutable

Colecciones
list.filter { it > 2 }

Filtrar colección

Colecciones
list.map { it * 2 }

Transformar cada elemento

Colecciones
list.fold(0) { acc, x -> acc + x }

Fold (reduce con inicial)

Colecciones
list.groupBy { it % 2 }

Agrupar por predicado

Colecciones
list.sortedBy { it.name }

Ordenar por clave

Colecciones
list.firstOrNull { it > 10 }

Primera coincidencia o null

Colecciones
suspend fun fetch(): String { ... }

Función suspending

Coroutines
runBlocking { val x = fetch() }

Ejecutar coroutine (bloqueante)

Coroutines
launch { doWork() }

Coroutine fire-and-forget

Coroutines
val result = async { fetch() }.await()

Async con resultado

Coroutines
delay(1000)

Delay no bloqueante (ms)

Coroutines
withContext(Dispatchers.IO) { file.read() }

Cambiar dispatcher

Coroutines
coroutineScope { launch {...}; launch {...} }

Scope de concurrencia estructurada

Coroutines
Mostrando 57 de 57 fragmentos

Cheat Sheet de Kotlin — Coroutines, Null Safety, Data Classes y Extensions

Kotlin salió de JetBrains en 2011 como alternativa menos verbosa a Java sobre la JVM, y Google lo adoptó como lenguaje preferido en Android en 2019; desde entonces ha crecido hasta cubrir null safety, corrutinas, data classes, jerarquías selladas y extensiones, manteniéndose como capa fina sobre el bytecode subyacente. La chuleta de abajo cubre más de 55 fragmentos entre básicos, null safety, funciones, clases, colecciones y corrutinas. La mayoría de los líos en código real no vienen de olvidar la sintaxis. Vienen de rarezas que parecen normales pero muerden. El operador `!!` transforma un nullable en no-nulo al precio de una `NullPointerException` si el valor era nulo de verdad. Un `lateinit var` solo admite tipos de referencia no-nulos y lanza `UninitializedPropertyAccessException` si se lee antes de tiempo. Un `when` sobre una clase sellada es exhaustivo solo cuando se asigna o retorna; usado como sentencia, el compilador deja pasar casos en silencio. Estos son los fragmentos que se acaban consultando al depurar precisamente eso: la cadena de safe calls, el destructuring de data class, el scope de corrutinas.

Trampas habituales en Kotlin

Hay un puñado de patrones que merecen estar en la primera pantalla de cualquier archivo Kotlin. `val` es el valor por defecto y `var` la excepción, porque el estado local rara vez necesita mutar y la inmutabilidad elimina una clase de bug de concurrencia sin esfuerzo. El operador Elvis `name ?: "unknown"` encadena naturalmente tras un safe call para producir un resultado no-nulo sin escalera de `if (x == null)`. `data class` genera `equals`, `hashCode`, `toString` y `copy` para que los tipos del dominio dejen de cargar con boilerplate, y el destructuring `val (id, name) = user` sale gratis. Las corrutinas deben vivir dentro de un `coroutineScope` o `viewModelScope`, no en `GlobalScope`, porque la concurrencia estructurada cancela hijos cuando muere el padre; `GlobalScope` filtra. Y `Unit` es un tipo real que devuelven las funciones sin retorno explícito, no la ausencia de uno, detalle que importa al guardar una referencia de función en un contenedor genérico. La chuleta agrupa todo esto en básicos, null safety, funciones, clases, colecciones y corrutinas, así la sección correcta queda a un clic.

  • Más de 55 fragmentos prácticos
  • 6 categorías desde básicos a coroutines
  • Null safety y safe-call
  • Data classes, sealed classes, objects
  • Coroutines y concurrencia estructurada
  • Copia al portapapeles con un clic

Gratis. Sin registro. Tus datos permanecen en tu navegador. Anuncios mediante Google AdSense (con consentimiento).

Por ·