В конкретном случае вы даете, да. Но то, что у вас есть, это метод, а методы требуют особой осторожности.
Чистые функции всегда дают один и тот же результат для любого заданного ввода, независимо от текущего состояния программы. Методы можно рассматривать как функции, которым передается их объект как скрытый параметр. Чтобы быть чистым, метод не должен обращаться к какому-либо неявному состоянию (и они не могут вызывать любые другие методы/функции, которые восприимчивы к неявному состоянию). Это также означает отказ от использования каких-либо полей объектов, содержащих неявное состояние. Мы надеемся, что обсуждение комментариев дает пример того, как судить об этом контексте.
Недостаточно избегать изменяемых полей — значение в поле неизменяемых полей должно быть известным/предсказуемым. Например, если объект содержит неизменяемое приватное поле, которому при создании объекта присваивается случайное число, любой метод, использующий это значение для вычисления вывода, будет нечистым.
С другой стороны, если в вашем классе Dog было неизменяемое поле имени, которое было задано при создании объекта, то методы, использующие это поле, можно считать чистыми (если только что-то еще не дисквалифицирует их).
ИЗМЕНИТЬ
Было бы полезно сказать, что «побочный эффект» и «чистота» зависят от контекста (как обсуждалось в комментариях). Это то, на что я не совсем четко намекал, используя слова «познаваемый» и «предсказуемый». Обсуждение комментариев иллюстрирует важность знания контекста.
person
itsbruce
schedule
14.09.2016