54 votes

Comparaison redondante et "si" avant l'attribution

Voici l'exemple:

 if(value != ageValue) {
  ageValue = value;
}

Je veux dire, si nous attribuons la valeur d'une variable à une autre, pourquoi devrions-nous vérifier si elles ont de toute façon la même valeur?

Cela me trouble. Voici le contexte plus large:

 private double ageValue;
public double Age {
  get {
    return ageValue;
  }

  set {
    if(value != ageValue) {
      ageValue = value;
    }
  }
}

51voto

Dmitry Bychenko Points 17719

Voici un exemple de code lorsque la vérification est assez utile :

  public class MyClass {
    ...
    int ageValue = 0;

    public int AgeValue {
      get {
        return ageValue
      }
      protected set {
        ... // value validation here

        // your code starts
        if (value != ageValue) { 
          ageValue = value; 
        }
        // your code ends
        else
          return; // do nothing since value == ageValue

        // ageValue has been changed
        // Time (or / and memory) consuming process
        SaveToRDBMS();
        InvalidateCache(); 
        ...
      } 
    } 

 ... 

Une mise en œuvre plus naturelle, cependant, consiste à vérifier au tout début afin d'éviter des calculs inutiles.

     protected set {
      if (ageValue == value)
        return;

      ... // value validation here
      ageValue = value; 

      // ageValue has been changed
      // Time (or / and memory) consuming process
      SaveToRDBMS();
      InvalidateCache();  
      ...
    }

21voto

Codor Points 1861

Le if n'est, à l'inspection, pas redondant. Cela dépend de la mise en œuvre restante. Notez qu'en C #, != peut être surchargé, ce qui signifie que l'évaluation peut avoir des effets secondaires. De plus, les variables vérifiées pourraient être implémentées en tant que propriétés, ce qui peut également avoir des effets secondaires sur l'évaluation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X