我开始学习函数式编程,并且希望使用Scala而不是Haskell或Lisp。
但是有些人声称将Scala作为第一门功能语言进行学习会减慢您对函数式编程的学习,因为Scala允许您同时使用两种方法进行编程,并且在遇到棘手的问题时往往会以程序方式进行编程。
我如何确保以纯粹的功能方式进行编程?也许是由于无法正确地区分这两种样式,因此我会不经意地进行程序编程)。
例如,我知道我应该只使用vals而不是vars。
最佳答案
其他答案已经提出了一些好的观点,但是为了尝试快速掌握一些准则,请按以下步骤操作:
首先,要完全避免的一些事情:
var
关键字。 while
关键字。 scala.collection.mutable
包中使用任何东西。 asInstanceOf
方法。 null
。如果您遇到过null
(使用其他人的代码),请立即将其包装在更合适的数据类型中(通常Option
会很好用)。 然后,通常需要避免几件事:
Unit
的任何东西。返回类型为Unit
的函数不执行任何操作,或仅通过副作用进行操作。在某些情况下,您将无法避免这种情况(IO很明显),但是在其他地方看到它则可能是杂质的迹象。 一旦避免了这些事情,该怎么做才能将代码转变为更具功能性?
fold
可能是您最大的候选者-列表上的大多数操作都可以通过适当的fold
来实现。 foo match {
case Some(x) => Some(x + 2)
case None => None
}
可以替换为:
foo map ( _ + 2 )
关于scala - 如何在Scala上执行函数式编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16418140/