ConstructiCat Logo
CodeBust.
Browse section ▾

Substituir Algoritmo.

Problem

Então você quer substituir um algoritmo existente por um novo?

Solution

Substitua o corpo do método que implementa o algoritmo por um novo algoritmo.

##Example

Before
String foundPerson(String[] people){
  for (int i = 0; i < people.length; i++) {
    if (people[i].equals("Don")){
      return "Don";
    }
    if (people[i].equals("John")){
      return "John";
    }
    if (people[i].equals("Kent")){
      return "Kent";
    }
  }
  return "";
}
After
String foundPerson(String[] people){
  List candidates =
    Arrays.asList(new String[] {"Don", "John", "Kent"});
  for (int i=0; i < people.length; i++) {
    if (candidates.contains(people[i])) {
      return people[i];
    }
  }
  return "";
}

##Why Refactor

  1. A refatoração gradual não é o único método para melhorar um programa. Às vezes um método está tão cheio de problemas que é mais fácil demoli-lo e começar do zero. E talvez você tenha encontrado um algoritmo que seja muito mais simples e eficiente. Se for esse o caso, basta substituir o algoritmo antigo pelo novo.

  2. Com o passar do tempo, seu algoritmo pode ser incorporado a uma biblioteca ou framework bem conhecido e você quer se livrar da sua implementação independente, a fim de simplificar a manutenção.

  3. Os requisitos do seu programa podem mudar de forma tão drástica que o seu algoritmo existente não pode ser aproveitado para a tarefa.

##How to Refactor

  1. Certifique-se de ter simplificado o algoritmo existente o máximo possível. Mova o código não essencial para outros métodos usando Extrair Método. Quanto menos partes móveis houver no seu algoritmo, mais fácil será substituí-lo.

  2. Crie seu novo algoritmo em um novo método. Substitua o algoritmo antigo pelo novo e comece a testar o programa.

  3. Se os resultados não corresponderem, volte à implementação antiga e compare os resultados. Identifique as causas da discrepância. Embora a causa muitas vezes seja um erro no algoritmo antigo, é mais provável que se deva a algo que não está funcionando no novo.

  4. Quando todos os testes forem concluídos com sucesso, exclua o algoritmo antigo de vez!