Biblioteca Padrão Kotlin: visão geral completa
A Biblioteca Padrão Kotlin (stdlib) é um conjunto poderoso de ferramentas, embutido diretamente na linguagem. Ela fornece tudo o que é necessário para o desenvolvimento diário: desde o trabalho com coleções e strings até corrotinas e serialização. Ao contrário do Java, o Kotlin elimina o código boilerplate, oferecendo uma sintaxe concisa e expressiva. Nesta visão geral, analisaremos os principais módulos da stdlib com exemplos práticos.
1. Trabalhando com coleções
A biblioteca oferece coleções imutáveis (List, Set, Map) e mutáveis (MutableList, MutableSet, MutableMap) com um rico conjunto de funções de ordem 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 } // 15Funções-chave:
map,filter,flatMap— transformação e filtragemgroupBy,partition— agrupamento de elementoszip,unzip— combinação de coleçõeschunked,windowed— divisão em partes
2. Strings e expressões regulares
Kotlin estende String com métodos ausentes no Java: remoção de prefixos/sufixos, verificação de nulidade, templates.
val text = " Olá, Kotlin! "println(text.trim()) // "Olá, Kotlin!"println(text.removePrefix(" ")) // "Olá, Kotlin! "println(text.contains(Regex("Kotlin"))) // true
// Strings multilinha com trimIndentval json = """ { "name": "Kotlin", "year": 2016 }""".trimIndent()3. Segurança contra nulos e operador elvis
Um dos principais recursos do Kotlin é a proteção embutida contra NPE. A biblioteca padrão fornece funções de chamada segura (?.let) e o operador elvis (?:).
val name: String? = getUserName()val length = name?.length ?: 0 // se name == null, então 0name?.let { println("Nome é $it") } // executado apenas se name != null4. Corrotinas (kotlinx.coroutines)
Embora as corrotinas sejam formalmente uma biblioteca separada, elas são consideradas parte do ecossistema Kotlin. Permitem escrever código assíncrono de forma síncrona.
import kotlinx.coroutines.*
fun main() = runBlocking { launch { delay(1000L) println("Mundo!") } println("Olá,")}Componentes principais:
launch— inicia uma corrotina sem retornar valorasync— inicia com retorno deDeferredwithContext— alterna o contexto (ex.: para a thread da UI)- Canais (
Channel) — para transferir dados entre corrotinas
5. Serialização (kotlinx.serialization)
Suporte embutido para JSON, Protobuf, CBOR e outros formatos através de anotações.
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. Fluxos e sequências
Para cálculos preguiçosos, use Sequence em vez de List — isso economiza memória ao trabalhar com grandes volumes de dados.
val seq = generateSequence(1) { it + 1 } // sequência infinita .take(10) .filter { it % 2 == 0 } .toList()println(seq) // [2, 4, 6, 8, 10]Funções de extensão
Também na biblioteca
Trabalhando com S3 e armazenamentos em nuvem em Node.js: biblioteca @aws-sdk/client-s3
Protocol Buffers para C++: guia completo com exemplos práticos
Internacionalização (i18n) em Java: guia completo com exemplos