如何以功能性的方式编写Scala-案例类和不变性等



我在现场观看了一场演讲,该人说他们在工作中在功能上做scala,使用案例类,将一种类型转换为另一种,到处都是不可实现的。

这实际上是如何工作的?我很想看到一个简单的Hello World应用程序。

我也看不出如何完全摆脱var,因为有时我只需要它。

coursera上有一门课程。

" Hello world"并不是很好地演示功能方法,因为它没有功能。(实际上,正如@Delnan所指出的那样,写入标准输出被认为是副作用,因此永远无法使该程序纯粹是功能性的。)

您需要var的最可能原因是使用命令式循环,这确实不是功能方法。功能等效物是在集合上使用一些可用的过滤器/变换功能,或使用递归。

简单示例:以" f"开头的列表中找到所有字符串。命令风格(Java):

List<String> result = new ArrayList<String>();
for (String s : strings) {
  if (s.startsWith("F")
    result.add(s);
}

旧样式迭代循环的不完善会更加明显。

相反,功能风格可能是:

val result = strings.filter(_.startsWith("F"))