Logotipo do ConstructiCat
CodeBust.
Explorar a seção ▾

Remover Sinalizador de Controle.

Problema

Você tem uma variável booleana que atua como um sinalizador de controle para várias expressões booleanas.

Solução

Em vez da variável, use break, continue e return.

##Exemplo

Antes
void checkSecurity(String[] people) {
  boolean found = false;
  for (int i = 0; i < people.length; i++) {
    if (!found) {
      if (people[i].equals("Don")) {
        sendAlert();
        found = true;
      }
      if (people[i].equals("John")) {
        sendAlert();
        found = true;
      }
    }
  }
}
Depois
void checkSecurity(String[] people) {
  for (String person : people) {
    if (person.equals("Don") || person.equals("John")) {
      sendAlert();
      return;
    }
  }
}

##Por que refatorar

Os sinalizadores de controle remontam aos tempos antigos, quando os programadores “de verdade” sempre tinham um único ponto de entrada para suas funções (a linha de declaração da função) e um único ponto de saída (bem no final da função).

Nas linguagens de programação modernas, esse cacoete de estilo está obsoleto, já que temos operadores especiais para modificar o fluxo de controle em laços e outras construções complexas:

  • break: interrompe o laço

  • continue: interrompe a execução do ramo atual do laço e vai verificar as condições do laço na próxima iteração

  • return: interrompe a execução da função inteira e retorna seu resultado, se fornecido no operador

##Benefícios

  • O código com sinalizadores de controle costuma ser muito mais pesado do que o código escrito com operadores de controle de fluxo.

##Como refatorar

  1. Encontre a atribuição de valor ao sinalizador de controle que causa a saída do laço ou da iteração atual.

  2. Substitua-a por break, se for uma saída de um laço; continue, se for uma saída de uma iteração; ou return, se você precisar retornar esse valor da função.

  3. Remova o código restante e as verificações associadas ao sinalizador de controle.