Code Smell #1 - Método Longo (Long Method)
Descrição
O Long Method se refere a um código que possui um método (ou função) muito longo, com muitas linhas de código. Esse é um problema comum em programação, pois métodos longos podem ser difíceis de ler, entender e manter.
Problema
Sinais de que um método pode estar sofrendo do code smell Long Method incluem:
O método tem muitas linhas de código, tornando difícil entender seu propósito.
O método realiza muitas tarefas diferentes, tornando difícil separar e compreender suas responsabilidades.
O método contém muitos loops, ifs e outras estruturas de controle, tornando difícil seguir seu fluxo.
O método é difícil de testar, pois abrange muitos cenários diferentes.
Solução
Os métodos longos podem ser um indicador de que o código está precisando ser refatorado para quebrar a funcionalidade em partes menores e mais gerenciáveis. Dividir o método em funções menores com nomes descritivos pode ajudar a tornar o código mais legível e fácil de manter.
Dividir os métodos para serem curtos e focados em uma única tarefa.
Reduzir o acoplamento excessivo entre os módulos ou classes.
Exemplo
Código com code smell Long Method
func calcularSalario(colaborador Colaborador) float64 {
var salarioBase float64 = colaborador.SalarioBase
var comissao float64 = colaborador.Comissao
var horaExtra float64 = colaborador.HoraExtra
// calcular o salário bruto
var salarioBruto float64 = salarioBase + comissao
// calcular a hora extra (100 reais/hora)
var salarioExtra = 0
if horaExtra > 0 {
salarioExtra = horaExtra * 100
}
// calcular o salário total
var salarioTotal float64 = salarioBruto + salarioExtra
// calcular impostos
var imposto float64 = 0
if salarioTotal > 5000 {
imposto = salarioTotal * 0.2
} else if salarioTotal > 3000 {
imposto = salarioTotal * 0.1
}
// calcular salário líquido
var salarioLiquido float64 = salarioTotal - imposto
return salarioLiquido
}
Código Refatorado
func calcularSalario(colaborador Colaborador) float64 {
var salarioBase float64 = colaborador.SalarioBase
var comissao float64 = colaborador.Comissao
var horaExtra float64 = colaborador.HoraExtra
var salarioBruto float64 = calcularSalarioBruto(salarioBase, comissao)
var salarioExtra float64 = calcularHoraExtra(horaExtra)
var salarioTotal float64 = calcularSalarioTotal(salarioBruto, salarioExtra )
var impostosfloat64 = calcularImposto(salarioTotal)
var salarioLiquido float64 = calcularSalarioLiquido(salarioTotal, impostos)
return salarioLiquido
}
func calcularSalarioBruto(salarioBase, comissao float64) float64 {
return salarioBase + comissao
}
func calcularHoraExtra(horaExtra float64) float64 {
if horaExtra > 0 {
salarioExtra = horaExtra * 100
}
return 0
}
func calcularSalarioTotal(salarioBruto, salarioExtra float64) float64 {
return salarioBruto + salarioExtra
}
func calcularImposto(salarioTotal float64) float64 {
if salarioTotal > 5000 {
return salarioTotal * 0.2
} else if salarioTotal > 3000 {
return salarioTotal * 0.1
}
return 0
}
func calcularSalarioLiquido(salarioTotal, impostos float64) float64 {
return salarioTotal - impostos
}