Es geht um Nebenwirkungen.
Die Frage, ob var1
ein Teil des Staates ist, verfehlt den Punkt dieser Frage. Sicher, wenn var1
es bestehen bleiben muss, muss es eine Instanz sein. Beide Ansätze können angewendet werden, um zu funktionieren, ob Persistenz erforderlich ist oder nicht.
Der Nebenwirkungsansatz
Einige Instanzvariablen werden nur zur Kommunikation zwischen privaten Methoden von Aufruf zu Aufruf verwendet. Diese Art von Instanzvariable kann aus der Existenz heraus überarbeitet werden, muss es aber nicht sein. Manchmal sind die Dinge mit ihnen klarer. Dies ist jedoch nicht ohne Risiko.
Sie lassen eine Variable aus ihrem Bereich heraus, da sie in zwei verschiedenen privaten Bereichen verwendet wird. Nicht, weil es in dem Bereich benötigt wird, in dem Sie es platzieren. Das kann verwirrend sein. Die "Globalen sind böse!" Grad der Verwirrung. Das kann funktionieren, ist aber nicht gut skalierbar. Es funktioniert nur im Kleinen. Keine großen Gegenstände. Keine langen Vererbungsketten. Verursacht keinen Jojo- Effekt.
Der funktionale Ansatz
Nun, auch wenn var1
nichts bestehen bleiben muss , müssen Sie verwenden, wenn für jeden Übergangswert, den er annehmen könnte, bevor er den Zustand erreicht, den Sie zwischen öffentlichen Aufrufen beibehalten möchten. Das heißt, Sie können eine var1
Instanz immer noch mit nur funktionaleren Methoden festlegen .
So Teil des Staates oder nicht, können Sie noch einen der beiden Ansätze verwenden.
In diesen Beispielen ist 'var1' so gekapselt, dass nichts anderes als Ihr Debugger weiß, dass es existiert. Ich vermute, Sie haben das absichtlich getan, weil Sie uns nicht voreingenommen machen wollen. Zum Glück ist mir egal welche.
Das Risiko von Nebenwirkungen
Das heißt, ich weiß, wo Ihre Frage herkommt. Ich habe unter miserablen gearbeitet yo yo ‚ing Erbe , das mutiert eine Instanzvariable auf mehreren Ebenen in mehreren Methoden und squirrelly gegangenes versuchen , ihm zu folgen. Das ist das Risiko.
Dies ist der Schmerz, der mich zu einem funktionaleren Ansatz treibt. Eine Methode kann ihre Abhängigkeiten dokumentieren und in ihrer Signatur ausgeben. Dies ist ein kraftvoller, klarer Ansatz. Sie können damit auch ändern, was Sie an der privaten Methode übergeben, sodass diese innerhalb der Klasse wiederverwendbarer ist.
Die Vorteile von Nebenwirkungen
Es ist auch einschränkend. Reine Funktionen haben keine Nebenwirkungen. Das kann eine gute Sache sein, ist aber nicht objektorientiert. Ein großer Teil der Objektorientierung ist die Fähigkeit, sich auf einen Kontext außerhalb der Methode zu beziehen. Es ist die Stärke von OOP, dies zu tun, ohne dass die Globalen hier und da auslaufen. Ich bekomme die Flexibilität eines globalen, aber es ist schön in der Klasse enthalten. Ich kann eine Methode aufrufen und jede Instanzvariable auf einmal ändern, wenn ich möchte. Wenn ich das tue, bin ich verpflichtet, der Methode zumindest einen Namen zu geben, der klar macht, worum es geht, damit die Leute nicht überrascht werden, wenn das passiert. Kommentare können ebenfalls hilfreich sein. Manchmal werden diese Kommentare als "Beitragsbedingungen" formalisiert.
Der Nachteil funktionaler privater Methoden
Der funktionale Ansatz macht einige Abhängigkeiten deutlich. Sofern Sie nicht in einer reinen funktionalen Sprache arbeiten, können versteckte Abhängigkeiten nicht ausgeschlossen werden. Wenn Sie sich nur eine Methodensignatur ansehen, wissen Sie nicht, dass sie im Rest des Codes keinen Nebeneffekt vor Ihnen verbirgt. Das tust du einfach nicht.
Post Bedingungen
Wenn Sie und alle anderen Mitglieder des Teams die Nebenwirkungen (vor / nach den Bedingungen) zuverlässig in Kommentaren dokumentieren, ist der Nutzen aus dem funktionalen Ansatz viel geringer. Ja, ich weiß, träume weiter.
Fazit
Persönlich tendiere ich in beiden Fällen zu funktionalen privaten Methoden, wenn ich kann, aber ehrlich gesagt, hauptsächlich, weil diese vor / nach-bedingten Nebenwirkungskommentare keine Compilerfehler verursachen, wenn sie veraltet sind oder wenn Methoden nicht in der richtigen Reihenfolge aufgerufen werden. Wenn ich nicht wirklich die Flexibilität von Nebenwirkungen brauche, möchte ich lieber nur wissen, dass die Dinge funktionieren.