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

时间:2014-06-23 12:09:05

标签: scala

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

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

3 个答案:

答案 0 :(得分:44)

官方Scala Style Guide上有一章就此问题。它本身很清楚,但我会在这里留下一些引用。

核心理念是:

  

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

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

  

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

还有一个事实是sealed仅适用于同一个文件。

  

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

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

  

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

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

  

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

所以:将Scala类和对象放在单独的文件中,除非它们属于上述三个例外中的一个。

答案 1 :(得分:10)

在Scala中,在单个文件中有多个类是完全有效的 AS LONG AS 它们紧密相关。

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

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

缺点

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

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

答案 2 :(得分:4)

有时您必须在一个源文件中放置几个​​特征,类或对象,尤其是在使用sealed特征时。 sealed特征只能在同一源文件中扩展。