23

这对于这里的 FP 行家来说似乎真的很明显,但是 Scala 中的无点风格有什么好处呢?在这个主题上真正卖给我的是一个插图,它显示了无点风格在某些方面(例如性能、优雅、可扩展性、可维护性)比用非无点风格解决相同问题的代码要好得多。

4

4 回答 4

23

很简单,它是关于能够避免指定不需要的名称,考虑一个简单的例子:

List("a","b","c") foreach println

在这种情况下,foreach正在寻找 accept String => Unit,一个接受 String 并返回 Unit 的函数(本质上,没有可用的返回,它纯粹通过副作用工作)

无需在此处将名称绑定到传递给的每个 String 实例println。可以说,这样做只会使代码更加冗长:

List("a","b","c") foreach {println(_)}

甚至

List("a","b","c") foreach {s => println(s)}

就我个人而言,当我看到不是以无点样式编写的代码时,我认为绑定名称可能会被使用两次,或者它在记录代码方面具有一定的意义。同样,我认为无点风格是我可以更简单地推理代码的标志。

于 2011-07-25T09:17:01.607 回答
5

一般而言,无点风格的一个吸引力在于,没有一堆“点”(值而不是函数)四处飘荡,必须在多个地方重复以将它们贯穿计算,出错的机会就更少了,例如在键入变量名称时。

然而,在 Scala 中,无点的优势很快被其推断类型的能力所抵消,无点代码加剧了这一事实,因为“点”充当了类型推断器的线索。在 Haskell 中,凭借其几乎完整的类型推断,这通常不是问题。

于 2011-07-25T07:51:45.530 回答
1

除了“优雅”之外,我没有看到其他优势:它有点短,并且可能更具可读性。它允许将功能作为实体进行推理,而无需在心理上对功能应用程序进行“更深层次”的思考,但是您当然需要先习惯它。

我不知道任何通过使用它来提高性能的例子(在一个方法足够时你最终得到一个函数的情况下可能会变得更糟)。

于 2011-07-25T07:49:45.607 回答
-5

Scala 的无点语法是神奇的 Scala 操作符的一部分,它是真正的函数。即使是最基本的运算符也是函数:

例如:

val x = 1
val y = x + 1

...是相同的...

val x = 1
val y = x.+(1)

...但当然,无点风格读起来更自然(加号似乎是运算符)。

于 2011-07-25T09:28:56.587 回答