Por que Kotlin não é apenas "mais uma linguagem para JVM"?
Quando a JetBrains lançou o Kotlin em 2016, poucos poderiam prever que, em alguns anos, essa linguagem se tornaria o padrão para desenvolvimento Android e um dos principais candidatos ao trono no mundo backend. Hoje, Kotlin não é apenas açúcar sintático sobre Java. É um ecossistema poderoso, onde cada biblioteca resolve uma tarefa específica de forma elegante e com o mínimo de código boilerplate.
Neste artigo, vamos analisar as bibliotecas Kotlin mais populares que realmente simplificam a vida do desenvolvedor. Não vamos listar todas — apenas o que vale a pena estudar agora. Vamos lá!
1. Ktor — seu novo cliente e servidor HTTP
Se você procura um cliente HTTP (ou até mesmo um servidor) leve, assíncrono e totalmente configurável — o Ktor será seu melhor amigo. Ao contrário do pesado Spring Boot, o Ktor não impõe uma arquitetura. Você decide quais módulos conectar.
Exemplo: Cliente HTTP para obter dados
import io.ktor.client.*import io.ktor.client.engine.cio.*import io.ktor.client.request.*import io.ktor.client.statement.*
suspend fun main() { val client = HttpClient(CIO) val response: HttpResponse = client.get("https://api.github.com/repos/jetbrains/kotlin") println("Status: ${response.status}") println("Corpo: ${response.bodyAsText()}") client.close()}Ktor suporta plugins para serialização, compressão, logging e autenticação. É uma das bibliotecas Kotlin mais populares para trabalhar com rede.
2. Kotlinx.serialization — serialização sem dor
Esqueça Gson e Jackson. O Kotlinx.serialization funciona no nível do compilador, não por reflexão. Isso proporciona ganho de desempenho e total segurança de tipos.
Exemplo: Serialização de uma data class para JSON
import kotlinx.serialization.*import kotlinx.serialization.json.*
@Serializabledata class User(val name: String, val age: Int)
fun main() { val user = User("Ana", 28) val jsonString = Json.encodeToString(user) println(jsonString) // {"name":"Ana","age":28}
val decoded = Json.decodeFromString<User>(jsonString) println(decoded) // User(name=Ana, age=28)}A biblioteca suporta polimorfismo, serializadores personalizados e trabalha com JSON, XML, CBOR e até YAML. É item obrigatório para qualquer projeto Kotlin.
3. Koin — injeção de dependência sem mágica
Dagger? Hilt? Pesado, muito código. O Koin oferece um DSL simples para DI, escrito em Kotlin puro. Sem geração de código, sem anotações — apenas funções.
Exemplo: Módulo simples e injeção
import org.koin.core.context.startKoinimport org.koin.dsl.moduleimport org.koin.core.component.KoinComponentimport org.koin.core.component.inject
class Repositoryclass Service(private val repo: Repository) { fun doWork() = "Trabalhando com ${repo}"}
val myModule = module { single { Repository() } factory { Service(get()) }}
fun main() { startKoin { modules(myModule) } val service: Service = object : KoinComponent {}.inject() println(service.doWork())}Koin é ideal para projetos médios e pequenos, onde não se quer pagar o preço da complexidade.
4. Exposed — ORM para quem não gosta de ORM
A maioria dos ORMs esconde o SQL, mas o Exposed age de forma diferente: ele permanece próximo ao SQL, mas oferece um DSL conveniente em Kotlin. Você escreve em Kotlin e obtém SQL puro com autocompletar.
Exemplo: Criando uma tabela e fazendo uma consulta
import org.jetbrains.exposed.sql.*import org.jetbrains.exposed.sql.transactions.transaction
object Users : Table() { val id = integer("id").autoIncrement() val name = varchar("name", 50)\