我最近开始使用Scala编程,来自Python和Java我想知道在Scala中定义对象/类时的正确方法或接受的方式是什么。与python一样,Scala支持在单个文件中添加多个类或对象定义。
纯粹从公认的结构角度来看,每个对象都需要在自己的文件中定义,还是允许自己选择?
答案 0 :(得分:44)
官方Scala Style Guide上有一章就此问题。它本身很清楚,但我会在这里留下一些引用。
核心理念是:
通常,文件应包含单个逻辑编译单元。 “逻辑”是指一个阶级,特征或对象。
当然,伴侣对象有一个例外:
本指南的一个例外是具有伴随对象的类或特征。伴随对象应与其对应的类或特征在同一文件中分组。
还有一个事实是sealed
仅适用于同一个文件。
尽管如上所述,但有一些重要的情况需要在单个文件中包含多个编译单元。一个常见的例子是密封特性和几个子类。由于密封超类(和特征)的性质,所有子类型必须包含在同一文件中。
大多数情况下,案例类只是简单的数据容器,可以组合在一起。
另一种情况是,多个类在逻辑上形成一个单一的,有凝聚力的组,通过将概念包含在单个文件中来共享概念,从而大大提供维护。
最后,豁免的多单元Scala文件有一个命名约定:
所有多单元文件都应该给出带有小写首字母的camelCase名称。
所以:将Scala类和对象放在单独的文件中,除非它们属于上述三个例外中的一个。
答案 1 :(得分:10)
在Scala中,在单个文件中有多个类是完全有效的 AS LONG AS 它们紧密相关。
但并非所有语言都鼓励这种惯例,我认为值得考虑其原因。
当人们将多个类放入单个文件中时,我个人不喜欢它,因为它使查找类定义变得更加困难。这在代码审查中得到了放大,我希望能够尽快审查代码,而无需深入研究。
缺点
grep
找到文件赞成
答案 2 :(得分:4)
有时您必须在一个源文件中放置几个特征,类或对象,尤其是在使用sealed
特征时。 sealed
特征只能在同一源文件中扩展。