Si tratta di effetti collaterali.
Chiedere se var1
fa parte dello stato manca il punto di questa domanda. Certo se var1
deve persistere, deve essere un'istanza. Entrambi gli approcci possono essere fatti per funzionare se la persistenza è necessaria o meno.
L'approccio agli effetti collaterali
Alcune variabili di istanza vengono utilizzate solo per comunicare tra metodi privati da una chiamata all'altra. Questo tipo di variabile di istanza può essere refactored dall'esistenza ma non deve esserlo. A volte le cose sono più chiare con loro. Ma questo non è senza rischi.
Stai lasciando uscire una variabile dal suo ambito perché è usata in due diversi ambiti privati. Non perché è necessario nell'ambito che lo stai posizionando. Questo può essere fonte di confusione. I "globi sono cattivi!" livello di confusione. Questo può funzionare ma non si adatta bene. Funziona solo nel piccolo. Nessun grande oggetto. Nessuna catena di eredità lunga. Non causare un yo-yo effetto .
L'approccio funzionale
Ora, anche se var1
deve persistere, nulla dice che devi usare se per ogni valore transitorio potrebbe assumere prima di raggiungere lo stato che desideri conservare tra le chiamate pubbliche. Ciò significa che puoi ancora impostare avar1
un'istanza utilizzando nient'altro che metodi più funzionali.
Quindi, parte dello stato o no, puoi comunque usare entrambi gli approcci.
In questi esempi 'var1' è incapsulato in modo che nulla oltre al debugger sappia che esiste. Immagino che tu l'abbia fatto deliberatamente perché non vuoi influenzarci. Fortunatamente non mi interessa quale.
Il rischio di effetti collaterali
Detto questo, so da dove viene la tua domanda. Ho lavorato con miserabile yo yo 'ing eredità che muta una variabile di istanza a più livelli in diversi metodi e andato scoiattoli cercando di seguirlo. Questo è il rischio.
Questo è il dolore che mi spinge ad un approccio più funzionale. Un metodo può documentare le sue dipendenze e l'output nella sua firma. Questo è un approccio potente e chiaro. Ti consente inoltre di modificare ciò che passi al metodo privato rendendolo più riutilizzabile all'interno della classe.
Il lato positivo degli effetti collaterali
È anche limitante. Le funzioni pure non hanno effetti collaterali. Questa può essere una buona cosa ma non è orientata agli oggetti. Una grande parte dell'orientamento agli oggetti è la capacità di fare riferimento a un contesto esterno al metodo. Farlo senza far trapelare i globi da queste parti e scomparire è la forza di OOP. Ottengo la flessibilità di un globale ma è ben contenuto nella classe. Posso chiamare un metodo e mutare ogni variabile di istanza contemporaneamente se mi piace. Se lo faccio, sono obbligato almeno a dare al metodo un nome che chiarisca cosa sta facendo in modo che le persone non siano sorprese quando ciò accade. Anche i commenti possono aiutare. A volte questi commenti sono formalizzati come "condizioni post".
L'aspetto negativo di metodi privati funzionali
L'approccio funzionale rende alcuni dipendenze. A meno che tu non sia in un linguaggio funzionale puro, non può escludere dipendenze nascoste. Non sai, guardando solo la firma di un metodo, che non ti nasconde un effetto collaterale nel resto del suo codice. Semplicemente no.
Post condizionali
Se tu e tutti gli altri membri del team documentate in modo affidabile gli effetti collaterali (condizioni pre / post) nei commenti, il vantaggio derivante dall'approccio funzionale è molto inferiore. Sì, lo so, continua a sognare.
Conclusione
Personalmente tendo verso metodi privati funzionali in entrambi i casi, se possibile, ma onestamente è principalmente perché quei commenti sugli effetti collaterali pre / post condizionali non causano errori del compilatore quando sono obsoleti o quando i metodi vengono chiamati fuori servizio. A meno che non abbia davvero bisogno della flessibilità degli effetti collaterali, preferirei solo sapere che le cose funzionano.