Я ответил на ваш вопрос: а почему бы не разработать язык, чтобы предотвратить необходимость конвенции? Другими словами, почему Scala просто не заставляет постоянно использовать круглые скобки, вместо того, чтобы позволить программистам иногда их опускать?
Ответ находится в ссылочной прозрачности . По сути, если функция не имеет побочных эффектов, вызов функции может быть заменен ее результатом, не изменяя поведение программы.
Это означает, что функция без параметров или побочных эффектов семантически эквивалентна valхранению возвращаемого значения этой функции. Из-за этого свойства, по мере развития класса, программист может переключаться между использованием функции valили функцией, в зависимости от удобства или эффективности.
Поскольку вы можете опустить круглые скобки, это означает, что коду, вызывающему что-то подобное queue.size, не нужно ни знать, ни заботиться о том, sizeявляется ли функция или a val. Поэтому реализатор Queueкласса может свободно переключаться между ними без необходимости изменения какого-либо вызывающего кода (хотя я полагаю, что потребуется перекомпиляция). Стабилизирует публичный интерфейс класса. Например, вы могли бы начать queue.sizeс вызова sizeбазового объекта List, который потенциально является O(n), а затем изменить sizeего valна соображения эффективности.
Соглашение предлагает использовать круглые скобки, когда есть побочные эффекты, чтобы было ясно, что этот член класса определенно является вызовом функции и поэтому потенциально не может быть прозрачным по ссылкам. Для вызова кода важно знать, возникают ли побочные эффекты, чтобы они могли не вызывать его повторно. Если вас не волнует, является ли это функцией или нет, вы можете так же обращаться с ней, как будто это не так.