函数式编程的特点
Scalable 可伸缩。
纯函数(Pure Function),或函数的纯粹性(Purity),没有副作用(Side Effect)。
副作用指状态的变化(mutation)。如修改全局变量(x+=y),抛出异常,IO读写,调用有副作用的函数。引用透明(Referential Transparency)。对于相同的输入,总是能得到相同的输出。
如果 f(x) 的参数 x 和函数体都是引用透明的,那么函数 f 就是纯函数。(反例:append)
函数是第一等公民(First-class Function),函数、对象、变量、类同一级,可以把函数当作参数传给另一个函数,也可以把函数当作返回值返回,也可以在函数体里定义函数等。
一切都是计算,函数式编程中只有表达式,变量、函数都是表达式。
高阶函数(High order Function) 指把函数当作一个函数的输入或一个函数的输出。
闭包(Closure)
表达式求值策略
严格求值(Call By Value)和非严格求值(Call By Name)。
惰性求值(Lazy Evaluation)定义时不求值,第一次使用时才求值。
递归函数(Recursive Function)
函数式编程里没有循环,使用递归实现循环。(性能)
调优递归→尾递归(Tail Recursion)。
优点
- 生产效率高;
- 易于推理(Reasoning),对于给定的输入,总能得到确定的输出,调试方便;
- 并行编程,适用于多核计算,云计算(Spark),在多个节点上运算,得到的结果都是相同的;
环境
安装1
brew install scala
brew install sbt
终端编程1
scala
sbt console