Desenvolvimento - C#
Introdução a Refatoração – Parte III
Continuando nosso estudo sobre refatoração vamos apresentar neste artigo mais 2 técnicas de refactoring para a codificação de software, são elas Remover Assignments to Parameters e Consolidate Duplicate Conditional Fragments.
por Ivan Assis LealContinuando nosso estudo sobre refatoração vamos apresentar neste artigo mais 2 técnicas de refactoring para a codificação de software, são elas Remover Assignments to Parameters e Consolidate Duplicate Conditional Fragments.
Refatoração
– Remove Assignments to Parameters
Remover Assignments to Parameters , envolve remover as atribuições feitas em parâmetros para variáveis
temporárias. Veja o exemplo abaixo de como aplicar esta refactoring.
class Program
{
static void Main(string[] args)
{
Console.WriteLine(CalculaJuros(6,20).ToString("c"));
}
private static double CalculaJuros( int numeroDiasEmAtraso , double valorDoBoleto )
{
if (numeroDiasEmAtraso >= 2 && numeroDiasEmAtraso <= 5)
valorDoBoleto = valorDoBoleto + 5.00;
else if (numeroDiasEmAtraso > 5)
valorDoBoleto = valorDoBoleto + 12.00;
return valorDoBoleto;
}
}
Perceba que neste código que o valor de retorno que é manipulado durante o código se refere ao parâmetro do
método, neste caso o ideal é evitar trabalhar com a variável do parâmetro no código e sim trabalhar com uma
variável temporária.
Aplicando a refatoração Remover Assignments to Parameters que consiste em remover variável do parâmetro
para uma variável temporária e trabalhar com ele no código, obtemos o seguinte:
class Program
{
static void Main(string[] args)
{
Console.WriteLine(CalculaJuros(6, 20).ToString("c"));
}
private static double CalculaJuros(int numeroDiasEmAtraso, double valorDoBoleto)
{
double valorDoBoletoCalculado = 0.0;
if (numeroDiasEmAtraso >= 2 && numeroDiasEmAtraso <= 5)
valorDoBoletoCalculado = valorDoBoleto + 5.00;
else if (numeroDiasEmAtraso > 5)
valorDoBoletoCalculado = valorDoBoleto + 12.00;
return valorDoBoletoCalculado;
}
}
Refatoração - Consolidate Duplicate Conditional Fragments
Esta refactoring parece bastante obvia mas por incrível que parece isto pode ocorrer com mais freqüência do que
pensamos. A lógica é simples “mova para fora da condição todos os fragmentos que se repetem!”. Considere o
exemplo abaixo:
class Program
{
static void Main(string[] args)
{
int diasDeAtrasoDoPagamento = 8;
double valorDeJurosPorDiasDeAtraso = 0.0;
double valorDoPagamento = 150.00;
if( diasDeAtrasoDoPagamento >= 1 && diasDeAtrasoDoPagamento <= 3 )
valorDeJurosPorDiasDeAtraso = CalculaValorDeJuros(valorDoPagamento,0.02);
else if (diasDeAtrasoDoPagamento >= 4 && diasDeAtrasoDoPagamento <= 9 )
valorDeJurosPorDiasDeAtraso = CalculaValorDeJuros(valorDoPagamento,0.05);
else if (diasDeAtrasoDoPagamento > 9 )
valorDeJurosPorDiasDeAtraso = CalculaValorDeJuros(valorDoPagamento,0.09);
Console.WriteLine(valorDeJurosPorDiasDeAtraso.ToString());
}
static double CalculaValorDeJuros(double valorDoPagamento, double percentualDeJuros)
{
return valorDoPagamento * percentualDeJuros;
}
}
Veja que no pequeno exemplo acima a chamada ao método “CalculaValorDeJuros” ocorre 3 vezes na estrutura
condicional, aplicando a refactoring Consolidate Duplicate Conditional Fragments , iremos invocar o método
apenas uma única vez no final da estrutura.
class Program
{
static void Main(string[] args)
{
int diasDeAtrasoDoPagamento = 0;
double valorDeJurosPorDiasDeAtraso = 0.0;
double valorDoPagamento = 150.00;
double percentualDeJurosPorDiasDeAtraso = 0.0;
if (diasDeAtrasoDoPagamento >= 1 && diasDeAtrasoDoPagamento <= 3)
percentualDeJurosPorDiasDeAtraso = 0.02 ;
else if (diasDeAtrasoDoPagamento >= 4 && diasDeAtrasoDoPagamento <= 9 )
percentualDeJurosPorDiasDeAtraso = 0.05;
else if (diasDeAtrasoDoPagamento > 9 )
percentualDeJurosPorDiasDeAtraso = 0.09;
valorDeJurosPorDiasDeAtraso = CalculaValorDeJuros(valorDoPagamento,percentualDeJurosPorDiasDeAtraso);
Console.WriteLine(valorDeJurosPorDiasDeAtraso.ToString());
}
static double CalculaValorDeJuros(double valorDoPagamento, double percentualDeJuros)
{
return valorDoPagamento * percentualDeJuros;
}
}
Fonte da Matéria
· Código Limpo habilidades Práticas do Agile Software – Robert C. Martin
· Martin Fowler Web Site http://martinfowler.com/
· http://www.refactoring.com/