Principais erros de desenvolvedores Kotlin iniciantes
Kotlin é uma linguagem moderna, concisa e segura que está ganhando popularidade rapidamente, especialmente no desenvolvimento Android. No entanto, sua sintaxe, que incorpora o melhor do Java e das linguagens funcionais, muitas vezes confunde os iniciantes. Muitos vêm do mundo Java ou Python e cometem erros típicos que anulam as vantagens do Kotlin. Neste artigo, vamos analisar os 4 erros mais comuns de desenvolvedores iniciantes, mostrar com exemplos de código como corrigi-los e dar dicas práticas.
1. Ignorar o Null Safety e uso incorreto de operadores
Null Safety é a principal característica do Kotlin. Mas os iniciantes frequentemente evitam completamente tipos nullable ou abusam do operador !!, transformando o código em Java com NPE.
Erro: Uso excessivo de !!
fun getUserName(user: User?): String { return user!!.name // Se user == null — NPE}Como fazer corretamente:
fun getUserName(user: User?): String { return user?.name ?: "Convidado" // Chamada segura com operador elvis}Dica: Use ?.let, ?: ou requireNotNull para tratamento explícito de null. O operador !! só se justifica em testes ou quando você tem absoluta certeza do valor.
2. Confusão entre coleções mutáveis e imutáveis
Kotlin separa claramente MutableList e List. Iniciantes frequentemente declaram tudo com var e mutableListOf, o que leva a efeitos colaterais.
Erro: Modificar a lista dentro de uma função
fun processItems(items: MutableList<String>) { items.add("new") // Altera a lista original}Como fazer corretamente:
fun processItems(items: List<String>): List<String> { return items + "new" // Retorna uma nova cópia}Dica: Por padrão, use coleções imutáveis (listOf, mapOf). Use versões Mutable apenas dentro de funções ou classes locais.
3. Uso incorreto de Sealed classes e when
Sealed classes são uma ferramenta poderosa para modelar hierarquias restritas. Mas iniciantes esquecem que o when deve ser exaustivo.
Erro: when incompleto
sealed class Result { data class Success(val data: String) : Result() data class Error(val message: String) : Result()}
fun handle(result: Result) { when (result) { is Result.Success -> println(result.data) // Esqueceu do Error — o código compila, mas gera warning }}Como fazer corretamente:
fun handle(result: Result) { when (result) { is Result.Success -> println(result.data) is Result.Error -> println(result.message) } // Agora o when é exaustivo}Dica: Sempre adicione else ou trate todos os ramos. Use when como expressão para que o compilador verifique a completude.
4. Abuso de lambdas e confusão com funções de ordem superior
Kotlin incentiva o estilo funcional, mas desenvolvedores inexperientes frequentemente escrevem cadeias ilegíveis ou confundem it com parâmetros nomeados.
Erro: Cadeia muito complexa
list.filter { it > 0 }.map { it * 2 }.forEach { println(it) }Como fazer corretamente (com parâmetros nomeados):
list.filter { number -> number > 0 } .map { number -> number * 2 } .forEach { number -> println(number) }Dica: Para lambdas curtas, use it; para as complexas, use nomes explícitos. Divida cadeias longas em variáveis intermediárias.
Conclusão
Kotlin é uma linguagem que