Logo ConstructiCat
CodeBust.
Parcourir la section ▾

Remplacer une variable temporaire par une requête.

Problème

Vous placez le résultat d'une expression dans une variable locale pour l'utiliser plus tard dans votre code.

Solution

Déplacez l'expression entière dans une méthode distincte et renvoyez-en le résultat. Interrogez la méthode au lieu d'utiliser une variable. Intégrez la nouvelle méthode dans d'autres méthodes si nécessaire.

##Exemple

Avant
double calculateTotal() {
  double basePrice = quantity * itemPrice;
  if (basePrice > 1000) {
    return basePrice * 0.95;
  }
  else {
    return basePrice * 0.98;
  }
}
Après
double calculateTotal() {
  if (basePrice() > 1000) {
    return basePrice() * 0.95;
  }
  else {
    return basePrice() * 0.98;
  }
}
double basePrice() {
  return quantity * itemPrice;
}

##Pourquoi refactoriser

Ce refactoring peut poser les bases de l'application d'Extraire une méthode sur une portion d'une méthode très longue.

La même expression peut parfois se retrouver dans d'autres méthodes également, ce qui est une raison d'envisager la création d'une méthode commune.

##Avantages

  • Lisibilité du code. Il est bien plus facile de comprendre le but de la méthode getTax() que celui de la ligne orderPrice() * 0.2.

  • Du code plus léger grâce à la déduplication, si la ligne remplacée est utilisée dans plusieurs méthodes.

##Comment refactoriser

  1. Assurez-vous qu'une valeur est affectée à la variable une fois et une seule au sein de la méthode. Si ce n'est pas le cas, utilisez Scinder une variable temporaire pour garantir que la variable ne servira qu'à stocker le résultat de votre expression.

  2. Utilisez Extraire une méthode pour placer l'expression concernée dans une nouvelle méthode. Assurez-vous que cette méthode ne fait que renvoyer une valeur et ne modifie pas l'état de l'objet. Si la méthode affecte l'état visible de l'objet, utilisez Séparer la requête du modificateur.

  3. Remplacez la variable par une requête vers votre nouvelle méthode.