É sobre efeitos colaterais.
Perguntar se var1
é parte do Estado erra o objetivo desta questão. Claro que se var1
deve persistir, tem que ser uma instância. Qualquer uma das abordagens pode ser feita para trabalhar se a persistência é necessária ou não.
A abordagem do efeito colateral
Algumas variáveis de instância são usadas apenas para se comunicar entre métodos privados de chamada em chamada. Esse tipo de variável de instância pode ser refatorado fora da existência, mas não precisa ser. Às vezes as coisas são mais claras com eles. Mas isso não é isento de riscos.
Você está deixando uma variável fora de seu escopo porque é usada em dois escopos particulares diferentes. Não porque é necessário no escopo que você está colocando. Isso pode ser confuso. Os "globais são maus!" nível de confusão. Isso pode funcionar, mas não será bem dimensionado. Só funciona no pequeno. Não há grandes objetos. Não há longas cadeias de herança. Não cause um efeito ioiô .
A abordagem funcional
Agora, mesmo que var1
deva persistir, nada indica que você deve usá-lo para cada valor transitório que possa assumir antes de atingir o estado que você deseja preservar entre chamadas públicas. Isso significa que você ainda pode definir uma var1
instância usando nada além de métodos mais funcionais.
Portanto, parte do estado ou não, você ainda pode usar qualquer uma das abordagens.
Nestes exemplos, 'var1' é tão encapsulado que nada além do seu depurador sabe que ele existe. Suponho que você fez isso deliberadamente porque não quer nos influenciar. Felizmente eu não ligo para qual.
O risco de efeitos colaterais
Dito isto, eu sei de onde vem sua pergunta. Eu trabalhei sob a miserável herança de yo yo 'que modifica uma variável de instância em vários níveis em vários métodos e me esqueci tentando segui-la. Esse é o risco.
Essa é a dor que me leva a uma abordagem mais funcional. Um método pode documentar suas dependências e saída em sua assinatura. Essa é uma abordagem clara e poderosa. Também permite alterar o que você passa no método privado, tornando-o mais reutilizável dentro da classe.
A vantagem dos efeitos colaterais
Também é limitador. Funções puras não têm efeitos colaterais. Isso pode ser uma coisa boa, mas não é orientada a objetos. Uma grande parte da orientação a objetos é a capacidade de se referir a um contexto fora do método. Fazer isso sem vazar globais por aqui e por aí vai é a força da OOP. Eu recebo a flexibilidade de um global, mas ele está bem contido na classe. Eu posso chamar um método e alterar todas as variáveis de instância de uma só vez, se eu quiser. Se fizer isso, sou obrigado a pelo menos dar um nome ao método que deixe claro o que está acontecendo, para que as pessoas não se surpreendam quando isso acontecer. Comentários também podem ajudar. Às vezes, esses comentários são formalizados como "pós-condições".
A desvantagem dos métodos privados funcionais
A abordagem funcional esclarece algumas dependências. A menos que você esteja em uma linguagem funcional pura, ele não pode excluir dependências ocultas. Você não sabe, olhando apenas para uma assinatura de métodos, que não está escondendo um efeito colateral de você no restante do código. Você simplesmente não.
Postar condicionais
Se você e todos os outros membros da equipe documentam com segurança os efeitos colaterais (condições pré / pós) nos comentários, o ganho da abordagem funcional é muito menor. Sim, eu sei, sonhe.
Conclusão
Pessoalmente, eu tendem a usar métodos privados funcionais em ambos os casos, se puder, mas honestamente é principalmente porque esses comentários de efeitos colaterais condicionais pré / pós não causam erros de compilador quando estão desatualizados ou quando os métodos são chamados fora de ordem. A menos que eu realmente precise da flexibilidade dos efeitos colaterais, prefiro apenas saber que as coisas funcionam.