Code review em Kotlin: o que verificar e como dar feedback

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Code review em Kotlin: o que verificar e como dar feedback



Code review é uma das ferramentas mais eficazes para manter a qualidade do código, compartilhar conhecimento na equipe e prevenir bugs. No entanto, apenas "passar os olhos" pelo pull request não é suficiente. Na linguagem Kotlin, com seu rico sistema de tipos, coroutines e recursos funcionais, é importante prestar atenção a pontos específicos. Neste artigo, vamos analisar exatamente o que observar ao revisar código em Kotlin e como formular observações para que sejam úteis, e não ofensivas.



1. Princípios básicos de feedback construtivo



Antes de passar para os detalhes técnicos, vamos lembrar algumas regras que tornam o code review útil para todos os participantes.



Foco no código, não no autor

Em vez de "Você escreveu um código ruim", diga "Este método pode ser simplificado usando let". A especificidade e o tom neutro reduzem a tensão.



Divisão em categorias

Marque as observações como:

  • Blocking — deve ser corrigido obrigatoriamente (erro lógico, vazamento de recurso).
  • Nitpick — pequenas críticas (estilo, formatação).
  • Question — esclarecimento (intenção não está clara).


Explicação do "porquê"

Não basta dizer "use filterNotNull()". Adicione: "Isso eliminará um loop desnecessário e tornará o código autodocumentado". Assim, o autor aprende, e não apenas corrige.



2. Null safety e tipos: os principais aliados do Kotlin



Kotlin foi projetado para evitar NullPointerException em tempo de compilação. Verifique se essa proteção não foi violada.



Evite !! (not-null assertion) desnecessários

O operador !! é um grito de socorro. Seu uso deve ser exceção, não regra.



// Ruim: risco de NPEfun process(user: User?) {    val name = user!!.name}

// Bom: chamada segurafun process(user: User?) { val name = user?.name ?: "Convidado"}


O que verificar: se você vir !!, pergunte ao autor se pode ser substituído por ?.let, ?: (elvis) ou requireNotNull().



Uso correto de tipos nullable

Nem todos os parâmetros precisam ser nullable. Se a função sempre espera um valor, declare o tipo sem o ponto de interrogação.



// Questionável: null não significa nadafun log(message: String?) {    println(message ?: "null")}

// Melhor: exigência explícitafun log(message: String) { println(message)}


3. Coroutines e threads: assincronicidade sem dor



Kotlin Coroutines é uma ferramenta poderosa, mas é fácil usá-la incorretamente. Ao revisar, preste atenção aos seguintes pontos.



Dispatcher correto para as tarefas

Não execute operações longas (rede, disco) no Dispatchers.Main.



// Ruim: bloqueia a UIGlobalScope.launch(Dispatchers.Main) {    val data = fetchFromNetwork() // trava}

// Bom: troca de contextoviewModelScope.launch { val data = withContext(Dispatchers.IO) { fetchFromNetwork() } updateUI(data)}


Vazamento de coroutines e structured concurrency

Use viewModelScope, lifecycleScope ou coroutineScope em vez de GlobalScope. Este último vive enquanto o aplicativo vive e facilmente leva a vazamentos.



// Perigoso: vazamentoGlobalScope.launch { /* ... */ }

// Seguro: vinculado ao ciclo de vidalifecycleScope.launch { /* ... */ }


4. Coleções e estilo funcional: concisão e legibilidade



Kotlin oferece uma biblioteca rica para trabalhar com coleções. Use-a em vez de loops explícitos.



Encadeamentos em vez de mutações

Evite adicionar manualmente a uma lista se puder coletar a res

Blogs

Book Recommendations