Вот что Программирование в Scala (раздел 10.3) должно сказать:
Рекомендуемое соглашение - использовать метод без параметров, когда нет параметров, и метод обращается к изменяемымсостояние только путем чтения полей содержащего объекта (в частности, оно не изменяет изменяемое состояние).Это соглашение поддерживает принцип унифицированного доступа 1, который гласит, что на клиентский код не должно влиять решение о реализации атрибута в виде поля или метода.
Вот что (неофициально) ScalaРуководство по стилю (стр. 18) должно сказать:
Scala позволяет пропускать скобки для методов arity-0 (без аргументов):
reply()
// is the same as
reply
Однако этот синтаксис следует использовать только в том случае, если рассматриваемый метод не имеет побочных эффектов (чисто функциональный).Другими словами, было бы приемлемо опустить круглые скобки при вызове queue.size, но не при вызове println ().Это соглашение отражает соглашение об объявлении метода, приведенное выше.
В последнем не упоминается принцип унифицированного доступа.
Если ваш метод toString
может быть реализован как val
, это означает, что поле является неизменным.Однако, если ваш класс изменчив, toString
может не всегда давать один и тот же результат (например, для StringBuffer
).Итак, Программирование в Scala подразумевает, что мы должны использовать toString()
в двух различных ситуациях:
1) Когда его значение является изменяемым
2)Когда есть побочные эффекты
Лично я думаю, что более распространенным и более последовательным является игнорирование первого из них.На практике toString
почти никогда не будет иметь побочных эффектов.Поэтому (если это не так) всегда используйте toString
и игнорируйте принцип унифицированного доступа (следуя Руководство по стилю ): сохраняйте скобки для обозначения побочных эффектов, а не изменчивости.