Riguarda gli effetti collaterali.
Chiedendo 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 lavorare indipendentemente dal fatto che la persistenza sia necessaria o meno.
L'approccio agli effetti collaterali
Alcune variabili di istanza sono utilizzate solo per comunicare tra metodi privati da una chiamata all'altra. Questo tipo di variabile di istanza può essere ridefinita al di fuori dell'esistenza ma non deve esserlo. A volte le cose sono più chiare con loro. Ma questo non è senza rischi.
Stai lasciando una variabile fuori dal suo ambito perché è usata in due diversi ambiti privati. Non perché sia necessario nel campo di applicazione, lo stai posizionando. Questo può essere fonte di confusione. I "globali sono malvagi!" livello di confusione. Questo può funzionare ma non si ridimensionerà. Funziona solo nel piccolo. Niente grandi oggetti Nessuna catena di eredità lunga. Non provocare un effetto yo yo .
L'approccio funzionale
Ora, anche se var1
deve persistere, nulla dice che devi usare se per ogni valore transitorio che potrebbe assumere prima che raggiunga lo stato che vuoi conservare tra le chiamate pubbliche. Ciò significa che puoi ancora impostare un'istanza var1
utilizzando solo metodi più funzionali.
Quindi parte dello stato o no, puoi comunque utilizzare entrambi gli approcci.
In questi esempi 'var1' è così incapsulato che nulla, a parte il tuo debugger, sa 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 sotto miserabile yo yo all'ereditarietà che muta una variabile di istanza a più livelli in più metodi ed è andata squirrelly 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 produrre nella sua firma. Questo è un approccio potente e chiaro. Permette anche di cambiare ciò che si passa al metodo privato rendendolo più riusabile 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 riferirsi a un contesto esterno al metodo. Fare ciò senza far fuoriuscire globalmente tutto il mondo qui e via è 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 in una volta, se mi piace. Se lo faccio, sono obbligato a dare almeno al metodo un nome che chiarisca a cosa serve, così le persone non saranno sorprese quando ciò accadrà. I commenti possono aiutare pure. A volte questi commenti sono formalizzati come "post conditions".
Lo svantaggio dei metodi privati funzionali
L'approccio funzionale rende chiare le dipendenze alcune . A meno che non sia in un puro linguaggio funzionale, non può escludere dipendenze nascoste. Non sai, guardando solo la firma di un metodo, che non nasconde un effetto collaterale da te nel resto del codice. Semplicemente no.
Post conditionals
Se tu e tutti gli altri membri del team documentate in modo affidabile gli effetti collaterali (condizioni pre / post) nei commenti, il guadagno dall'approccio funzionale è molto inferiore. Sì, lo so, onora.
Conclusione
Personalmente tendo a privilegiare metodi privati funzionali in entrambi i casi, se posso, ma onestamente è soprattutto 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 semplicemente sapere che le cose funzionano.