Scala:单个文件中的多个对象和类,或者每个对象/类都有自己的文件

Luc*_*man 33 scala

我最近开始使用Scala编程,来自Python和Java我想知道在Scala中定义对象/类时的正确方法或接受的方式是什么.与python一样,Scala支持在单个文件中添加多个类或对象定义.

纯粹从公认的结构角度来看,每个对象都需要在自己的文件中定义,还是允许自己选择?

DCK*_*ing 50

有关此问题的官方Scala风格指南中有一章.它本身很清楚,但我会在这里留下一些引用.

核心思想是:

通常,文件应包含单个逻辑编译单元."逻辑"是指一个阶级,特征或对象.

当然,伴侣对象有一个例外:

本指南的一个例外是具有伴随对象的类或特征.伴随对象应与其对应的类或特征在同一文件中分组.

还有一个事实是sealed只能在同一个文件中工作.

尽管如上所述,但有一些重要的情况需要在单个文件中包含多个编译单元.一个常见的例子是密封特性和几个子类.由于密封超类(和特征)的性质,所有子类型必须包含在同一文件中.

大多数情况下,案例类只是简单的数据容器,可以组合在一起.

另一种情况是,多个类在逻辑上形成一个单一的,有凝聚力的组,通过将概念包含在单个文件中来共享概念,从而大大提供维护.

最后,豁免多单元Scala文件有一个命名约定:

所有多单元文件都应该给出带有小写首字母的camelCase名称.

因此:将Scala类和对象放在单独的文件中,除非它们属于上述三个异常中的一个.


Jor*_*mer 11

在Scala中,它是完全有效的单个文件中有多个类,只要他们是紧密相关的.

但并非所有语言都鼓励这种惯例,我认为值得考虑其原因.

当人们将多个类放入单个文件中时,我个人不喜欢它,因为它使得查找类定义变得更加困难.这在代码审查中得到了放大,我希望能够尽快审查代码而无需深入研究.

缺点

  1. 代码审查要求我进行更多搜索以查找课程
  2. 我不喜欢必须grep找到一个文件
  3. 一致的命名约定允许我使用我的文本编辑器或IDE工具通过类名快速打开文件

优点

  1. 正如Jesper指出的那样,某些情况需要它
  2. 隐藏支持类/特征以最小化文件结构"噪音"