【问题标题】:Scala: multiple objects and classes in a single file or each object/class its own fileScala:单个文件中的多个对象和类或每个对象/类都有自己的文件
【发布时间】:2014-08-13 11:18:23
【问题描述】:

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

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

【问题讨论】:

  • 我在原型设计时会例外,但一旦代码固化,我会重构为每个文件只使用一个class/trait 和/或伴侣object 的标准。在几乎所有我想定义多个单元的情况下,如sealed traits 或具体实现,将它们包含在伴随的object 中是有意义的。所以这真的归结为一个问题:这个其他单位是否合理地“属于”伴生对象?如果没有,请将其放入自己的文件中。

标签: scala


【解决方案1】:

官方Scala Style Guide有一个章节讲这个。这本身就很清楚,但我将在这里留下一些引号。

核心思想是:

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

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

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

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

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

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

另一种情况是多个类在逻辑上形成一个单一的、有凝聚力的组,共享概念到通过将它们包含在单个文件中来极大地促进维护的程度。

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

所有多单元文件都应使用首字母小写的驼峰式命名。

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

【讨论】:

    【解决方案2】:

    在 Scala 中,在一个文件中包含多个类是完全有效的只要它们紧密相关。

    但并非所有语言都鼓励这种约定,我认为这是值得考虑的原因。

    我个人不喜欢人们将多个类放到一个文件中,因为这样会更难找到类定义。这在代码审查中被放大了,我希望能够尽快审查代码而无需四处寻找。

    缺点

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

    优点

    1. 正如 Jesper 指出的那样,某些场景需要它
    2. 支持类/特征保持隐藏以最大程度地减少文件结构“噪音”

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-13
        • 1970-01-01
        • 2013-09-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多