Это о побочных эффектах.
Вопрос о том, var1
является ли часть государства, упускает смысл этого вопроса. Конечно, если var1
должно сохраняться, это должен быть экземпляр. Любой подход может быть использован для работы, независимо от того, нужно упорство или нет.
Побочный эффект подхода
Некоторые переменные экземпляра используются только для связи между закрытыми методами от вызова к вызову. Этот тип переменной экземпляра может быть реорганизован из существования, но это не обязательно. Иногда с ними все становится понятнее. Но это не без риска.
Вы выпускаете переменную из области видимости, потому что она используется в двух разных частных областях. Не потому, что это нужно в том объеме, в котором вы его размещаете. Это может сбивать с толку. «Глобалы злые!» уровень запутанности. Это может сработать, но это не будет хорошо масштабироваться. Работает только в малом. Нет больших объектов. Нет длинных цепочек наследования. Не вызывайте эффекта йо-йо .
Функциональный подход
Теперь, даже если var1
должно сохраняться, ничто не говорит о том, что вы должны использовать if для каждого переходного значения, которое оно может принять, прежде чем достигнет состояния, которое вы хотите сохранить между публичными вызовами. Это означает, что вы все равно можете установить var1
экземпляр, используя только более функциональные методы.
Так что часть государства или нет, вы все равно можете использовать любой подход.
В этих примерах 'var1' не содержит ничего, кроме того, что ваш отладчик знает, что он существует. Я предполагаю, что вы сделали это сознательно, потому что вы не хотите предвзятого отношения к нам. К счастью, мне все равно, какие.
Риск побочных эффектов
Тем не менее, я знаю, откуда твой вопрос. Я работал под жалкой йо йо «ИНГ наследство , которое мутирует переменной экземпляра на нескольких уровнях , в нескольких методов и ушел беличьей пытается следовать за ним. Это риск.
Это боль, которая побуждает меня к более функциональному подходу. Метод может документировать свои зависимости и выводить в своей подписи. Это мощный, четкий подход. Это также позволяет вам изменить то, что вы передаете приватному методу, делая его более пригодным для повторного использования в классе.
Побочные эффекты
Это также ограничивает. Чистые функции не имеют побочных эффектов. Это может быть хорошо, но это не объектно-ориентированный. Большая часть объектной ориентации - это способность ссылаться на контекст вне метода. Делать это, не пропуская глобалы повсюду - это сила ООП. Я получаю гибкость глобального, но это приятно содержится в классе. Я могу вызвать один метод и мутировать каждую переменную экземпляра сразу, если мне нравится. Если я сделаю это, я обязан, по крайней мере, дать методу имя, которое прояснит, к чему он стремится, чтобы люди не удивились, когда это произойдет. Комментарии также могут помочь. Иногда эти комментарии оформляются как «условия публикации».
Недостаток функциональных частных методов
Функциональный подход проясняет некоторые зависимости. Если вы не используете чисто функциональный язык, он не может исключать скрытые зависимости. Вы не знаете, глядя только на сигнатуру метода, что она не скрывает побочный эффект от вас в остальной части кода. Вы просто не
Пост условия
Если вы и все остальные члены команды надежно документируете побочные эффекты (условия до / после) в комментариях, то выигрыш от функционального подхода намного меньше. Да, я знаю, мечтай.
Вывод
Лично я склоняюсь к функциональным закрытым методам в любом случае, если могу, но, честно говоря, это в основном потому, что эти комментарии до / после условного побочного эффекта не вызывают ошибок компилятора, когда они устарели или когда методы вызываются не по порядку. Если мне действительно не нужна гибкость побочных эффектов, я бы просто знал, что все работает.