enh*_*ull 22 functional-programming scala pointfree
对于这里的FP认知来说,这看起来真的很明显,但Scala中的点自由风格有什么用呢?在这个主题上真正卖给我的是一个插图,它显示了点自由风格在某些方面(例如性能,优雅,可扩展性,可维护性)如何在非点自由风格中解决相同问题的代码.
Kev*_*ght 22
很简单,它是关于能够避免指定不需要的名称,考虑一个简单的例子:
List("a","b","c") foreach println
Run Code Online (Sandbox Code Playgroud)
在这种情况下,foreach正在寻求接受String => Unit,一个接受String并返回Unit的函数(基本上,没有可用的返回,它纯粹通过副作用工作)
这里没有必要将名称绑定到传递给的每个String实例println.可以说,它只是让代码更加冗长:
List("a","b","c") foreach {println(_)}
Run Code Online (Sandbox Code Playgroud)
甚至
List("a","b","c") foreach {s => println(s)}
Run Code Online (Sandbox Code Playgroud)
就个人而言,当我看到没有以无点样式编写的代码时,我将其视为可以使用两次绑定名称的指示符,或者它在记录代码时具有一定的意义.同样,我认为无点样式是我可以更简单地推理代码的标志.
一般无点样式的一个吸引力是,如果没有一堆"点"(值与函数相对)浮动,必须在几个地方重复以通过计算进行处理,制造错误的机会就会减少,例如,在键入变量名称时.
然而,Scala中由于其推断类型的能力微弱而迅速抵消了无点的优势,这一事实由无点代码加剧,因为"点"作为类型推理器的线索.在Haskell中,通过几乎完整的类型推理,这通常不是问题.