假设案例类是代数类型,因此有些人反对在案例类中添加方法。
有人可以举一个为什么这个主意不好的例子吗?

最佳答案

这是导致更多问题的那些问题之一。
以下是我对此的看法。

让我们看看定义案例类时会发生什么,
Scala编译器执行以下操作,

  • 创建一个类及其配套对象。
  • 实现可用作工厂的apply方法。这让
    您创建没有new关键字的类的实例。
  • 在参数列表中以val前缀所有参数。即。使它成为不变的
  • 添加hashCodeequalstoString的实现
  • 实现unapply方法,case类支持pattern matching。当定义Algebraic Data Type时,这一点很重要。
  • 为字段生成accessors。请注意,它不会生成“mutators”

  • 现在,我们可以看到案例类不是Java Bean的完全对等对象。
    案例类倾向于表示Datatype而不是表示entity
    我认为它们是程序员的好朋友,因为它减少了无尽的吸气剂,覆盖相等和哈希码方法等的样板。

    现在来提一个问题,

    如果您从函数式编程的角度来看它,那么案例类是必经之路,因为您将看到不可变性,相等性,并且可以确定case class表示一个数据结构。在很多时候,使用FP编程的人都说要在ADT中使用它们。

    如果您的案例类具有适用于该类的state的逻辑,则对于函数式编程而言,这是一个不好的选择。

    我更倾向于在需要确定一个类来表示数据结构的情况下使用案例类,因为那是我在自动生成的方法的帮助下获得的附加信息,以及patter-matching的其他优点。当我以带有副作用的OO方式编程时,可变状态我使用class

    话虽如此,在某些情况下,您仍然可以使用utlity方法创建一个案例类。我只是认为这些机会较少。

    关于scala - 将方法添加到Scala案例类是个好主意吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37061636/

    10-12 23:31