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 Leal



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.


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/

Ivan Assis Leal

Ivan Assis Leal - Atuo a 5 anos com desenvolvimento de software em aplicações de pequeno e médio porte. Possuo experiência em desenvolvimento de aplicações web e desktop, sendo grande entusiasta em práticas de desenvolvimento e gerenciamento ágil de projetos em software. Blog: http://blog.setforcode.com/