Aula 162: Estratégias de Refatoração
Refatoração é uma habilidade essencial para qualquer desenvolvedor de software. Ela envolve a modificação do código para melhorar sua estrutura, legibilidade e manutenção, sem alterar seu comportamento externo. Nesta aula, exploraremos várias estratégias de refatoração com exemplos práticos em Swift.
Por que Refatorar?
Refatorar é fundamental porque:
- Melhora a Legibilidade: Códigos que são fáceis de ler são mais fáceis de manter.
- Reduz a Complexidade: Simplificar códigos complexos pode reduzir bugs e torná-los mais compreensíveis.
- Aumenta a Reusabilidade: Códigos bem estruturados podem ser reutilizados em diferentes partes da sua aplicação.
- Facilita os Testes: Códigos testáveis são frequentemente bem organizados e seguem princípios de SOLID.
Estratégias de Refatoração
1. Renomear Variáveis e Funções
Escolher nomes significativos pode aumentar consideravelmente a legibilidade do seu código.
Antes da Refatoração:
func calc(x: Int, y: Int) -> Int {
return x + y
}
Depois da Refatoração:
func calcularSoma(de primeiroNumero: Int, e segundoNumero: Int) -> Int {
return primeiroNumero + segundoNumero
}
2. Extrair Método
Se um método está fazendo demais, considere dividi-lo em métodos menores para aumentar a clareza.
Antes da Refatoração:
func processarTransacao(valor: Double) {
print("Processando transação de \(valor)")
// Mais lógica...
print("Transação concluída")
}
Depois da Refatoração:
func processarTransacao(valor: Double) {
print("Processando transação de \(valor)")
registrarConclusaoTransacao()
}
private func registrarConclusaoTransacao() {
print("Transação concluída")
}
3. Método Inline
Às vezes, métodos são tão simples que podem ser substituídos por seu conteúdo para reduzir a indireção desnecessária.
Antes da Refatoração:
func obterPrecoComDesconto(preco: Double) -> Double {
return preco * 0.9
}
let precoComDesconto = obterPrecoComDesconto(preco: 100.0)
Depois da Refatoração:
let precoComDesconto = 100.0 * 0.9
4. Substituir Números Mágicos por Constantes Nomeadas
Usar números mágicos pode tornar seu código menos legível. Substitua-os por constantes nomeadas.
Antes da Refatoração:
func calcularArea(raio: Double) -> Double {
return 3.14 * raio * raio
}
Depois da Refatoração:
let pi = 3.14
func calcularArea(raio: Double) -> Double {
return pi * raio * raio
}
5. Consolidar Códigos Duplicados
Se você encontrar o mesmo código aparecendo em vários lugares, consolide-o em um único método.
Antes da Refatoração:
func calcularAreaDoCirculo(raio: Double) -> Double {
return 3.14 * raio * raio
}
func calcularVolumeDaEsfera(raio: Double) -> Double {
return (4.0/3.0) * 3.14 * raio * raio * raio
}
Depois da Refatoração:
let pi = 3.14
func calcularAreaDoCirculo(raio: Double) -> Double {
return pi * raio * raio
}
func calcularVolumeDaEsfera(raio: Double) -> Double {
return (4.0/3.0) * pi * raio * raio * raio
}
6. Usar Guard para Saída Antecipada
Usar instruções guard
pode ajudar a deixar seu código mais limpo, tratando condições de forma antecipada.
Antes da Refatoração:
func processarValor(_ valor: Int?) {
if valor == nil {
return
}
// Processar valor
print("Processando \(valor!)")
}
Depois da Refatoração:
func processarValor(_ valor: Int?) {
guard let valorDesembrulhado = valor else {
return
}
print("Processando \(valorDesembrulhado)")
}
7. Simplificar Condicionais
Se você tem uma lógica condicional complexa, refatore-a para melhorar a clareza.
Antes da Refatoração:
if éMembro {
if idade > 18 {
print("Elegível")
}
} else {
print("Não elegível")
}
Depois da Refatoração:
if éMembro && idade > 18 {
print("Elegível")
} else {
print("Não elegível")
}
Conclusão
A refatoração é um processo contínuo que aprimora a qualidade do seu código. Ao seguir essas estratégias, você pode melhorar a legibilidade, manutenibilidade e desempenho do seu código. Lembre-se, o melhor código não se trata apenas de funcionalidade, mas também de clareza e concisão. Boa codificação!