Frage

Wie ich es immer verstanden, jede Änderung der Programme Zustand (oder irgendetwas mit IO zu tun) ist ein Nebeneffekt. Es spielt keine Rolle, ob die Änderung in einer globalen Variablen oder in einem privaten Bereich des Objekts erfolgt die Methode aufgerufen wird. Daraus folgt, dass alle Methoden, die etwas zurückgeben nicht entweder gar nichts oder eine Nebenwirkung haben
Meine Verwirrung kommt von einem unserer Universität Instruktoren. (Wer noch Student ist und somit nicht allwissend noch;)) sagt mir, Einrichter keine Nebenwirkungen hat.

War es hilfreich?

Lösung

Ihr Lehrer, der irrt. Mit Entschuldigungen zu den SO-Editoren für hier nicht den gesamten Artikel einfügen, ist es das, was Wikipedia zu sagen hat:

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

Geld Quote # 1:

  

In der Informatik, eine Funktion oder ein Ausdruck gesagt wird, eine Nebenwirkung haben, wenn zusätzlich einen Wert zu produzieren, es ändert auch einige Zustand oder hat eine beobachtbare Interaktion mit Funktionen aufrufen oder die Außenwelt.

Geld Quote # 2:

  

In der Gegenwart von Nebenwirkungen hängt ein Programm, das Verhalten auf vergangene Geschichte; das heißt, die Reihenfolge der Auswertung Angelegenheiten.

Nicht-NOP Setters erfüllen immer die Kriterien.

Andere Tipps

Getter und Setter sind nur syntaktischer Zucker für get_ und set_ Methoden. Sie können absolut Nebenwirkungen haben (obwohl es wahrscheinlich eine schlechte Idee Tweaking viele Felder zu starten, wenn alle der Anrufer wollte, war einen Zähler oder etwas zu erhöhen).

Zu allererst: Ich bin mir bewusst, der Sprache Agnostiker Tag „RUNAKO“ antwortete ganz richtig die Frage!. Aber oft wollen Sie Ihr Wissen in der realen Welt anwenden, damit ich denke, ich würde schön sein, auch eine Antwort zu geben, die dieses Problem in einer pragmatischen Art und Weise anspricht.

Wenn Sie mit dem realen Welt Sprachen wie C ++ zu tun, C # oder Java dann sogar eine nop Funktion tatsächliche Nebenwirkungen hat, den Code ausgeführt werden kann dazu führen!

Man denke nur an statisch-Konstrukteure. Auch wenn die Angaben nicht immer die Zeit, ein statischer Konstruktor angeben wird für eine Klasse läuft, die meiste Zeit wird es der Zeitpunkt, wo ein Verfahren oder ein Mitglied der Klasse wird zuerst zugegriffen.

Beispiel in C #:

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

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

Was mehr ist, dass auch ein Verfahren, der nicht an alle genannt werden Nebenwirkungen verursachen kann! Denken Sie an Reflexion (die Fähigkeit eines Programms Informationen über seine eigene Struktur abzufragen). Wenn ein Verfahren vorhanden ist, aber nicht genannt wird, kann es immer noch durch Reflexion erkannt werden.

Ein Verfahren ohne Anrufe zu ihm hat sicherlich eine Nebenwirkung auf ein Programm, das die Anzahl der Methoden innerhalb gibt!

Es läuft alles auf diese nach unten. Wenn Sie über die tatsächlichen Nebenwirkungen eines Verfahrens wissen wollen, müssen Sie zuerst bestimmen, was Sie sogar einen „Nebeneffekt“ sein betrachten

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top