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 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 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/

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/