Code review em Swift: o que verificar e como dar feedback
Code review — não é apenas uma verificação formal do código antes do merge. É uma das ferramentas mais eficazes para melhorar a qualidade do código, disseminar conhecimento dentro da equipe e prevenir bugs. Para desenvolvedores iOS/macOS iniciantes, o processo de revisão muitas vezes parece assustador: "E se eu perder um erro crítico?" ou "Como escrever um comentário sem ofender um colega?". Neste artigo, vamos detalhar exatamente o que observar ao revisar código Swift e como dar feedback de forma útil e motivadora.
O que verificar no código Swift: checklist para o revisor
Para que a revisão seja estruturada e eficaz, divida a verificação em vários blocos lógicos. Comece pela compreensão geral da tarefa e depois vá para os detalhes.
1. Arquitetura e lógica
O primeiro e mais importante ponto — o código resolve o problema proposto? Não se aprofunde no estilo até ter certeza de que a lógica está correta.
- Conformidade com os requisitos: Verifique se o código faz exatamente o que está descrito na tarefa ou ticket.
- Correção dos algoritmos: Existem erros lógicos? Por exemplo, condições trocadas em
ifouguard. - Tratamento de casos limite: O que acontece se o array estiver vazio ou a requisição de rede retornar
nil? O código deve ser robusto.
// ❌ Ruim: não considera o caso em que o array está vaziofunc firstElement(_ array: [Int]) -> Int { return array[0] // Crash!}
// ✅ Bom: extração segurafunc firstElement(_ array: [Int]) -> Int? { return array.first}2. Segurança de tipos e trabalho com Optionals
Swift é uma linguagem com tipagem forte e seu ponto forte é a segurança. Certifique-se de que o autor do código não abuse do force unwrapping.
- Force unwrap (!): Só é aceitável quando você tem 100% de certeza de que o valor não é
nil(por exemplo,IBOutlet). - Uso de Optional Binding:
if letouguard let— a maneira padrão e segura. - IUO (Implicitly Unwrapped Optional): Tente evitar, use Optionals comuns.
// ❌ Ruim: force unwrap sem verificaçãolet url = URL(string: "https://example.com")!// Se a string for inválida - o aplicativo irá travar
// ✅ Bom: inicialização seguraguard let url = URL(string: "https://example.com") else { print("URL inválida") return}3. Nomenclatura e legibilidade do código
O código é lido com muito mais frequência do que é escrito. Bons nomes de variáveis, funções e tipos são a chave para a manutenibilidade do projeto.
- Convenções Swift: Use
camelCasepara variáveis/funções ePascalCasepara tipos (struct, class, enum). - Clareza do nome: O nome deve descrever o propósito.
vé ruim,userNameé bom. - Propriedades booleanas: Devem começar com
is,has,can(por exemplo,isEnabled).
// ❌ Ruimlet a = fetchData()
// ✅ Bomlet userProfile = fetchCurrentUserProfile()4. Performance e gerenciamento de memória
Para aplicativos iOS/macOS, é crítico evitar vazamentos de memória e cálculos desnecessários.
- Ciclos de referência forte (Retain cycles): Verifique closures — elas capturam
selfsem[weak self]ou[unowned self]. - Trabalho com threads: Todas as atualizações de UI devem ocorrer na thread principal. Verifique se
DispatchQueue.main.asyncestá sendo usado. - De