Como os seniores veem seu código Kotlin: análise com exemplos reais
\n\nVocê escreveu o código, enviou para o repositório e espera ansiosamente pela aprovação. Mas, em vez do sinal verde, chegam dezenas de comentários do desenvolvedor sênior. Familiar? Se você programa em Kotlin, certamente já passou pela situação em que seu código, aparentemente perfeito, após o code review se transforma em abóbora.
\n\nNeste artigo, vamos analisar quais comentários típicos de seniores são mais comuns durante a revisão de código em Kotlin. Não vamos ensinar sintaxe — vamos mostrar como escrever para que seu código passe na revisão de primeira. Vamos lá!
\n\n1. Null Safety: "Por que você não usa o operador elvis?"
\n\nUm dos principais recursos do Kotlin é a null safety. Mas muitos desenvolvedores, especialmente os vindos do Java, continuam escrevendo código no estilo "verifique-se-é-null-e-execute". Os seniores percebem isso imediatamente.
\n\nExemplo ruim (estilo Java)
\nfun getUserName(user: User?): String {\n return if (user != null) {\n user.name\n } else {\n "Unknown"\n }\n}\n\nExemplo bom (estilo Kotlin)
\nfun getUserName(user: User?): String {\n return user?.name ?: "Unknown"\n}\n\nO uso do operador elvis (?:) e da safe call (?.) torna o código conciso e legível. Os seniores adoram quando você economiza linhas sem perder clareza. Lembre-se: if (x != null) { ... } else { ... } é um mau hábito.
2. Extension Functions: "Onde estão suas utilitárias?"
\n\nQuando você vê uma classe utilitária estática no estilo StringUtils.capitalize(str), um desenvolvedor experiente em Kotlin vai torcer o nariz. As extension functions são o que torna o Kotlin tão elegante.
Exemplo ruim
\nobject StringUtils {\n fun capitalize(text: String): String {\n return text.replaceFirstChar { it.uppercase() }\n }\n}\n\n// Uso\nval result = StringUtils.capitalize("hello")\n\nExemplo bom
\nfun String.capitalizeFirst(): String {\n return this.replaceFirstChar { it.uppercase() }\n}\n\n// Uso\nval result = "hello".capitalizeFirst()\n\nOs seniores dirão: "Por que você está criando um objeto lixeira? Apenas estenda a classe!" Use extension functions — isso melhora a legibilidade e segue o princípio das Kotlin best practices.
\n\n3. Sealed Classes em vez de Enum: "Seu enum está obsoleto"
\n\nEnums em Kotlin são bons, mas as sealed classes oferecem muito mais flexibilidade. Especialmente quando você precisa armazenar diferentes tipos de dados em uma mesma hierarquia.
\n\nExemplo ruim (enum)
\nenum class Result {\n SUCCESS,\n ERROR,\n LOADING\n}\n\nfun handleResult(result: Result) {\n when (result) {\n Result.SUCCESS -> // ...\n Result.ERROR -> // ...\n Result.LOADING -> // ...\n }\n}\n\nExemplo bom (sealed class)
\nsealed class Result {\n data class Success(val data: List<Item>) : Result()\n data class Error(val message: String, val code: Int) : Result()\n object Loading : Result()\n}\n\nfun handleResult(result: Result) {\n when (result) {\n is Result.Success -> println("Data: ${result.data}")\n is Result.Error -> println("Error: ${result.message}")\n Result.Loading -> println("Loading...")\n }\n}\n\nOs desenvolvedores seniores apreciarão que você use sealed classes para representar estados. Esta é uma das principais dicas senior kotlin — torne as hierarquias de tipos explícitas.
\n\n4. Scope Functions: "Você esqueceu do let, apply e run"
\n\nAs scope functions (let, apply, run, with, also) são poderosas