Il s'agit d'effets secondaires.
Demander si cela var1
fait partie de l'État passe à côté de l'essentiel de cette question. Bien sûr, si var1
doit persister, il doit s'agir d'une instance. Quelle que soit l'approche choisie, que la persistance soit nécessaire ou non.
L'approche des effets secondaires
Certaines variables d'instance ne sont utilisées que pour communiquer entre méthodes privées d'un appel à l'autre. Ce type de variable d'instance peut être remanié en dehors de l'existence, mais ce n'est pas obligatoire. Parfois, les choses sont plus claires avec eux. Mais ce n'est pas sans risque.
Vous laissez une variable hors de sa portée car elle est utilisée dans deux étendues privées différentes. Pas parce que c'est nécessaire dans le champ d'application que vous placez. Cela peut être déroutant. Les "globals sont diaboliques!" niveau de confusion. Cela peut marcher mais ça ne va pas bien. Cela ne fonctionne que dans le petit. Pas de gros objets. Pas de longues chaînes d'héritage. Ne cause pas d' effet yo yo .
L'approche fonctionnelle
Maintenant, même si var1
doit persister, rien ne dit que vous devez utiliser si, pour chaque valeur transitoire, elle peut prendre avant d’atteindre l’état que vous souhaitez préserver entre les appels publics. Cela signifie que vous pouvez toujours définir une var1
instance en utilisant uniquement des méthodes plus fonctionnelles.
Donc, qu’il fasse partie de l’État ou non, vous pouvez toujours utiliser l’une ou l’autre approche.
Dans ces exemples, 'var1' n'est donc pas encapsulé, à part que le débogueur le sache. Je suppose que vous avez fait cela délibérément parce que vous ne voulez pas nous biaiser. Heureusement, je m'en fiche.
Le risque d'effets secondaires
Cela dit, je sais d'où vient votre question. J'ai travaillé avec un héritage misérable de votre part qui mute une variable d'instance à plusieurs niveaux en plusieurs méthodes et qui est parti à la louche en essayant de la suivre. C'est le risque.
C'est la douleur qui me pousse vers une approche plus fonctionnelle. Une méthode peut documenter ses dépendances et la sortie dans sa signature. C'est une approche puissante et claire. Cela vous permet également de changer ce que vous passez avec la méthode privée pour la rendre plus réutilisable dans la classe.
L'avantage des effets secondaires
C'est aussi limitant. Les fonctions pures n'ont pas d'effets secondaires. Cela peut être une bonne chose mais ce n’est pas orienté objet. Une grande partie de l'orientation des objets est la possibilité de faire référence à un contexte extérieur à la méthode. Le fait de ne pas laisser échapper de globales partout ici et disparaître est la force de la POO. Je reçois la flexibilité d’un global mais c’est bien contenu dans la classe. Je peux appeler une méthode et muter chaque variable d'instance à la fois si je le souhaite. Si je fais cela, je suis obligé au moins de donner à la méthode un nom qui précise ce que c'est que faire pour que les gens ne soient pas surpris quand cela se produit. Les commentaires peuvent aussi aider. Parfois, ces commentaires sont formalisés en tant que "conditions post".
Les inconvénients des méthodes privées fonctionnelles
L'approche fonctionnelle clarifie certaines dépendances. Sauf dans un langage purement fonctionnel, il ne peut pas exclure les dépendances cachées. Vous ne savez pas, en regardant simplement une signature de méthode, que cela ne vous cache pas un effet secondaire dans le reste de son code. Tu ne le fais pas.
Post conditionals
Si vous et tous les autres membres de l’équipe documentez de manière fiable les effets secondaires (conditions pré / post) dans les commentaires, le gain de l’approche fonctionnelle sera bien moindre. Ouais je sais, rêve sur.
Conclusion
Personnellement, dans les deux cas, j'ai tendance à utiliser des méthodes privées fonctionnelles, mais honnêtement, c'est surtout parce que ces commentaires sur les effets secondaires pré / post conditionnels ne causent pas d'erreurs de compilation lorsqu'ils sont obsolètes ou lorsque des méthodes sont appelées en panne. Sauf si j'ai vraiment besoin de la flexibilité des effets secondaires, je préfère simplement savoir que les choses fonctionnent.