Desenvolvimento - C#
Introdução a Refatoração – Parte II
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 Introduce Explaining Variable e Inline Temp.
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 Introduce Explaining Variable e Inline Temp.
Introduce
Explaining Variable
Considere o código abaixo:
class Program
{
static void Main(string[] args)
{
double ValorDoPedido = 200.00;
double ValorDoFrete = 50.00;
bool PedidoFechado = true;
bool ParcelaValorPedido = true;
int
NumeroDeParcelas = 5;
if (ValorDoPedido > 100 && ValorDoFrete > 30 && PedidoFechado && ParcelaValorPedido && NumeroDeParcelas > 3)
{
// Ação
}
}
}
A técnica Introduce
Explaining Variable é aconselhada para pelo menos 2 casos : Estruturas
condicionais com muitas instruções e expressões complexas. No exemplo acima
podemos perceber uma estrutura condicional com várias condições, este tipo de
código pode ser difícil de ler.
Nesta situação podemos utilizar a refactoring Introduce Explaining Variable para tornar o código mais legível, a técnica consiste em fazer os seguinte passos:
· Remover parte da expressão em uma variável temporária.
·
Substituir
a expressão pelo valor da variável.
Veja o resultado
abaixo:
class Program
{
static void Main(string[] args)
{
double ValorDoPedido = 200.00;
double ValorDoFrete = 50.00;
bool PedidoFechado = true;
bool ParcelaValorPedido = true;
int
NumeroDeParcelas = 5;
bool ValorPedidoMaiorCondicao = ValorDoPedido > 100;
bool ValorFreteMairoCondicao = ValorDoFrete > 30;
bool NumeroParcelasMaiorCondicao = NumeroDeParcelas > 3;
if (ValorPedidoMaiorCondicao && ValorFreteMairoCondicao &&
PedidoFechado && ParcelaValorPedido && NumeroParcelasMaiorCondicao)
{
// Ação
}
}
}
Inline Temp
Esta técnica de
refatoração consiste em remover variáveis temporárias e passar elas para
expressões. A técnica e bastante simples segue abaixo sua aplicação, na
aplicação exemplo:
class Program
{
static void Main(string[] args)
{
Console.WriteLine( CalculaValorConta(5,10,2).ToString("c"));
}
private static double CalculaValorConta(double valorConta, double juros, int NumeroDeDiasEmAtraso)
{
double
valorAcrescimoPorAtraso = 0;
if (NumeroDeDiasEmAtraso >= 1 || NumeroDeDiasEmAtraso <= 2)
valorAcrescimoPorAtraso = 2.00;
else if (NumeroDeDiasEmAtraso > 2)
valorAcrescimoPorAtraso
= 4.00;
double
valoTotalConta = (valorConta * juros) + valorAcrescimoPorAtraso;
return (valoTotalConta);
}
}
Aplicando o
refactoring inline tempo por remover todas as variáveis temporárias e
inseri-las com expressões.
class Program
{
static void Main(string[] args)
{
Console.WriteLine( CalculaValorConta(5,10,2).ToString("c"));
}
private static double CalculaValorConta(double valorConta, double juros, int NumeroDeDiasEmAtraso)
{
double valorAcrescimoPorAtraso = 0;
if (NumeroDeDiasEmAtraso >= 1 || NumeroDeDiasEmAtraso <= 2)
valorAcrescimoPorAtraso = 2.00;
else if (NumeroDeDiasEmAtraso > 2)
valorAcrescimoPorAtraso
= 4.00;
return ( (valorConta * juros) + valorAcrescimoPorAtraso);
}
}
Logicamente esta técnica será aplicável para expressões que não são muito complexas, caso as expressões
forem complexas podemos utilizar a refactoring Extract Method.
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/