Logo ConstructiCat
CodeBust.
Parcourir la section ▾

Supprimer le drapeau de contrôle.

Problème

Vous avez une variable booléenne qui sert de drapeau de contrôle pour plusieurs expressions booléennes.

Solution

Au lieu de la variable, utilisez break, continue et return.

##Exemple

Avant
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;
      }
    }
  }
}
Après
void checkSecurity(String[] people) {
  for (String person : people) {
    if (person.equals("Don") || person.equals("John")) {
      sendAlert();
      return;
    }
  }
}

##Pourquoi refactoriser

Les drapeaux de contrôle remontent à une époque révolue, lorsque les « bons » programmeurs avaient toujours un seul point d'entrée dans leurs fonctions (la ligne de déclaration de la fonction) et un seul point de sortie (tout à la fin de la fonction).

Dans les langages de programmation modernes, ce tic de style est obsolète, car nous disposons d'opérateurs spéciaux pour modifier le flux de contrôle dans les boucles et autres constructions complexes :

  • break : arrête la boucle

  • continue : interrompt l'exécution de la branche courante de la boucle et passe à la vérification des conditions de la boucle lors de l'itération suivante

  • return : interrompt l'exécution de toute la fonction et renvoie son résultat s'il est fourni dans l'opérateur

##Avantages

  • Le code à base de drapeau de contrôle est souvent bien plus lourd que le code écrit avec des opérateurs de flux de contrôle.

##Comment refactoriser

  1. Repérez l'affectation de valeur au drapeau de contrôle qui provoque la sortie de la boucle ou de l'itération courante.

  2. Remplacez-la par break s'il s'agit d'une sortie de boucle ; continue s'il s'agit d'une sortie d'itération ; ou return si vous devez renvoyer cette valeur depuis la fonction.

  3. Supprimez le code et les vérifications restants associés au drapeau de contrôle.