Question

Comme je l’ai toujours compris, toute modification de l’état du programme (ou de tout ce qui a trait aux IO) est un effet secondaire. Peu importe que le changement se produise dans une variable globale ou dans un champ privé de l'objet sur lequel la méthode est appelée. Il s'ensuit que toutes les méthodes qui ne rapportent rien ne font rien du tout ou ont un effet secondaire.
Ma confusion provient d'un des professeurs de notre université (qui est toujours étudiant et donc pas encore omniscient;)) qui me dit des setters ne pas avoir d'effets secondaires.

Était-ce utile?

La solution

Votre instructeur se trompe. Avec les excuses des éditeurs SO pour ne pas avoir collé l'intégralité de l'article ici, voici ce que Wikipedia a à dire:

http://en.wikipedia.org/wiki/Side_effect_ (computer_science)

Money Quote # 1:

  

En informatique, une fonction ou une expression est dite avoir un effet secondaire si, en plus de produire une valeur, elle modifie également un état ou a une interaction observable avec les fonctions appelantes ou le monde extérieur.

Money Quote # 2:

  

En présence d’effets secondaires, le comportement d’un programme dépend des antécédents; c’est-à-dire que l’ordre d’évaluation est important.

Les non-NOP Setters répondent toujours à ce critère.

Autres conseils

Les accesseurs et les setters ne sont que du sucre syntaxique pour les méthodes get_ et set_. Ils peuvent absolument avoir des effets secondaires (bien que ce soit probablement une mauvaise idée de commencer à peaufiner de nombreux champs lorsque l'appelant souhaitait simplement incrémenter un compteur ou autre chose).

Tout d'abord: je suis conscient du tag agnostique du langage! "runako". a répondu à la question assez correctement. Mais souvent, vous souhaitez appliquer vos connaissances au monde réel, je pense donc que je serais ravi de fournir également une réponse qui aborde ce problème de manière plus pragmatique.

Lorsqu'il s'agit de langages du monde réel tels que c ++, c # ou java, même une fonction nop a des effets secondaires qui peuvent provoquer l'exécution de code!

Pensez simplement aux constructeurs statiques. Même si les spécifications ne spécifient pas toujours l'heure à laquelle un constructeur statique est exécuté pour une classe, il s'agira généralement du moment où une méthode ou un membre de la classe est utilisé pour la première fois.

Exemple en C #:

class NotSoObvious
{
    static NotSoObvious()
    {
        CauseSomeSideEffects();
    }

    // calling this can cause the constructor to run first!
    public static void DoNothing()
    {
        return;
    }
}

De plus, même une méthode qui n’est pas appelée du tout peut avoir des effets secondaires! Pensez à la réflexion (la capacité d'un programme à rechercher des informations sur sa propre structure). Lorsqu'une méthode est présente mais qu'elle n'est pas appelée, elle peut toujours être détectée par réflexion.

Une méthode sans appel a sûrement un effet secondaire sur un programme qui affiche le nombre de méthodes qu'il contient!

Tout se résume à ceci: si vous souhaitez connaître les effets secondaires réels d’une méthode, vous devez d’abord déterminer ce que vous considérez même comme un "effet secondaire".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top