Подтвердить что ты не робот

Scala: несколько объектов и классов в одном файле или каждый объект/класс - собственный файл

Недавно я начал программировать в Scala, исходя из Python и Java. Мне было интересно, какой правильный путь или принятый способ - определить объекты/классы в Scala. Scala поддерживает, как и python, добавление нескольких определений классов или объектов в один файл.

Итак, с точки зрения принятой структуры, каждый объект должен быть определен в собственном файле или вам разрешено сами выбирать это?

4b9b3361

Ответ 1

В этом разделе главу Scala Руководство по стилю. Это довольно ясно само по себе, но я просто оставлю некоторые цитаты здесь.

Основная идея:

Как правило, файлы должны содержать единый блок логической компиляции. Под "логическим" я подразумеваю класс, признак или объект.

Существует, конечно, исключение для сопутствующих объектов:

Единственное исключение из этого руководства - это классы или черты, у которых есть сопутствующие объекты. Объекты Companion должны быть сгруппированы с соответствующим классом или признаком в том же файле.

Также существует тот факт, что sealed работает только в одном файле.

Несмотря на сказанное выше, существуют некоторые важные ситуации, которые гарантируют включение нескольких единиц компиляции в один файл. Одним из распространенных примеров является запечатанный признак и несколько подклассов. Из-за характера запечатанных суперклассов (и признаков) все подтипы должны быть включены в один и тот же файл.

В большинстве случаев классы case являются просто контейнерами данных и могут быть сгруппированы вместе.

Другим случаем является то, что несколько классов логически образуют единую сплоченную группу, обмениваясь концепциями до такой степени, что обслуживание в значительной степени поддерживается путем их содержания в одном файле.

Наконец, существует соглашение об именах для исключенных многоуровневых файлов Scala:

Все файлы с несколькими блоками должны иметь имена camelCase с первой буквой в нижнем регистре.

Итак: поместите ваши классы и объекты Scala в отдельные файлы, если они не попадают в одно из трех упомянутых исключений.

Ответ 2

В Scala вполне допустимо иметь несколько классов в одном файле AS LONG AS, которые тесно связаны между собой.

Но не все языки поддерживают эту конвенцию, и я думаю, что стоит рассмотреть причину.

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

против

  • Кодовые обзоры требуют от меня больше поиска, чтобы найти класс
  • Мне не нравится иметь grep, чтобы найти файл
  • Согласованное соглашение об именах позволяет мне использовать мой текстовый редактор или инструменты IDE для быстрого открытия файла по имени класса

Доводы

  • Как отметил Йеспер, некоторые сценарии требуют его
  • Поддерживаемые классы/черты сохраняются скрытыми, чтобы минимизировать "шум" файловой структуры.

Ответ 3

Иногда вам нужно поместить несколько признаков, классов или объектов в один исходный файл, особенно когда вы используете черты sealed. Атрибут sealed может быть расширен только в том же исходном файле.