Biblioteca estándar de Kotlin: revisión completa
La biblioteca estándar de Kotlin (stdlib) es un potente conjunto de herramientas integrado directamente en el lenguaje. Proporciona todo lo necesario para el desarrollo diario: desde trabajar con colecciones y cadenas hasta corrutinas y serialización. A diferencia de Java, Kotlin elimina el código repetitivo ofreciendo una sintaxis concisa y expresiva. En esta revisión, analizaremos los módulos clave de stdlib con ejemplos prácticos.
1. Trabajo con colecciones
La biblioteca ofrece colecciones inmutables (List, Set, Map) y mutables (MutableList, MutableSet, MutableMap) con un rico conjunto de funciones de orden superior.
val numbers = listOf(1, 2, 3, 4, 5)val doubled = numbers.map { it * 2 } // [2, 4, 6, 8, 10]val even = numbers.filter { it % 2 == 0 } // [2, 4]val sum = numbers.reduce { acc, i -> acc + i } // 15Funciones clave:
map,filter,flatMap— transformación y filtradogroupBy,partition— agrupación de elementoszip,unzip— combinación de coleccioneschunked,windowed— división en partes
2. Cadenas y expresiones regulares
Kotlin extiende String con métodos que no están en Java: eliminación de prefijos/sufijos, verificación de vacío, plantillas.
val text = " Hola, Kotlin! "println(text.trim()) // "Hola, Kotlin!"println(text.removePrefix(" ")) // "Hola, Kotlin! "println(text.contains(Regex("Kotlin"))) // true
// Cadenas multilínea con trimIndentval json = """ { "name": "Kotlin", "year": 2016 }""".trimIndent()3. Seguridad contra nulos y operador Elvis
Una de las características clave de Kotlin es la protección integrada contra NPE. La biblioteca estándar proporciona funciones de llamada segura (?.let) y el operador Elvis (?:).
val name: String? = getUserName()val length = name?.length ?: 0 // si name == null, entonces 0name?.let { println("El nombre es $it") } // se ejecuta solo si name != null4. Corrutinas (kotlinx.coroutines)
Aunque las corrutinas son formalmente una biblioteca separada, se consideran parte del ecosistema de Kotlin. Permiten escribir código asíncrono de forma síncrona.
import kotlinx.coroutines.*
fun main() = runBlocking { launch { delay(1000L) println("¡Mundo!") } println("Hola,")}Componentes principales:
launch— inicio de corrutina sin valor de retornoasync— inicio con retorno deDeferredwithContext— cambio de contexto (por ejemplo, al hilo de UI)- Canales (
Channel) — para transferir datos entre corrutinas
5. Serialización (kotlinx.serialization)
Soporte integrado para JSON, Protobuf, CBOR y otros formatos mediante anotaciones.
import kotlinx.serialization.*import kotlinx.serialization.json.*
@Serializabledata class User(val name: String, val age: Int)
fun main() { val user = User("Alice", 30) val json = Json.encodeToString(user) println(json) // {"name":"Alice","age":30} val decoded = Json.decodeFromString<User>(json) println(decoded) // User(name=Alice, age=30)}6. Flujos y secuencias
Para cálculos perezosos, use Sequence en lugar de List — esto ahorra memoria al trabajar con grandes cantidades de datos.
val seq = generateSequence(1) { it + 1 } // secuencia infinita .take(10) .filter { it % 2 == 0 } .toList()println(seq) // [2, 4, 6, 8, 10]Funciones de extensión