Обычный доступ по умолчанию в scala

Я прочитал, что в scala нет пакета-private (по умолчанию в Java) и по умолчанию используется общедоступный доступ.

В чем смысл этого выбора? Это хорошая практика, поскольку общедоступный доступ по умолчанию делает все видимым, следовательно, является частью API?

Это означает, что нужно вводить дополнительные данные для инкапсуляции полей и методов (будь то private, private private, protected, access).

Ответы

Ответ 1

В Java гораздо проще выбрать "package-private" по умолчанию, потому что это один из трех возможных вариантов.

В Scala вы можете выбирать между общедоступным доступом (public), приватным доступом к пакету с наследованием (protected[C]), приватным доступом к пакету без наследования (private[C]), приватным доступом класса (private), объектно-частный доступ (private[this]), доступ наследования (protected), protected[this] доступ (как бы вы это ни называли), и, кроме того, у вас есть какой-то модификатор доступа к файлу и частному доступу (sealed).

Сложно выбрать значение по умолчанию, отличное от public.

(Учитывая внутренние методы, можно также добавить метод-частный в список...)

Ответ 2

Scala имеет гораздо большую гибкость при выборе видимости чего-то, чем Java, хотя некоторые правила видимости Java, связанные с вложенными классами, не могут быть переведены в Scala.

И, да, в Scala есть пакет-частный. Он записывается как private[package] в Scala.

Причина, по которой Scala делает public по умолчанию, потому что это наиболее распространенная видимость. "Дополнительная набрав" на самом деле меньше набирает текст, потому что гораздо более необычно сделать членов частным или защищенным.

Единственное исключение из этого правила в Java - это поля, которые должны быть закрытыми, чтобы можно было изменять детали реализации, не нарушая клиентов. Одним из практических последствий этого являются классы с полями, а затем геттеры и сеттеры для каждого поля.

В Scala, поскольку можно заменить a val или var на соответствующий def, это не требуется.

Ответ 3

Это то, что дает многим людям некоторые проблемы. Я бы предложил дать эту запись (на самом деле всю серию).

Неизменность также предотвращает любые смешения, которые обычно происходят с таким доступом. Возможно, верно, что "есть больше набрав", но, глядя на IDE, они несут ответственность за много ошибок, поскольку любой сгенерированный метод IDE обычно является общедоступным, что также не всегда корректно.