函数式编程

What

Functional Programming(函数式编程)在概念上和Object Oriented Programming(面向对象编程), Procedural Programming(过程化编程)相似, 是一种编程范式。
与OOP以对象为中心的理念不一样,FP将全部计算机的操做视为函数运算,函数是操做的基本单位。函数拥有和基本类型同样的地位,能够将一个变量赋值为函数(First class -- 一等公民),能够在函数的参数中传递函数(higher-order function -- 高阶函数)javascript

Why

  1. 学习一点新的编程范式能够有效防止老年痴呆。
  2. 真的颇有趣
  3. 相比于过程化、面向对象,函数式书写的代码更易读,更简短。
  4. 由于函数式编程是无反作用(side effects)的,不须要考虑死锁问题,适合并发编程,所以在云计算领域获得了普遍应用(Scala)

How

好了,进入正题
如下示例代码均为JavaScriptjava

1. 反作用--Side Effects

先来看两段代码程序员

//代码片断1 let minium = 20; const checkAge = (age)=> age >= minium; 
//代码片断2 let number = 2; const multipleNumber = (n) => { number = number * n; return number; } 

这两段代码有问题吗?
一般状况下,代码片断1并不会发生什么问题, 咱们传入年龄,而且判断是否是大于20岁。编程

但若是有人修改了minium呢?此时判断的条件改变了,致使咱们的结果也会改变。当咱们第二次运行checkAge(22)的时候,可能返回的并非第一次运行的结果。api

对于checkAge这个函数来讲,它须要观测的值不只有入参age,还有一个全局变量minium,它的运行结果依赖系统状态,这对于程序员来讲是十分痛苦的。并发

而代码片断2就很容易发现问题了,这个函数修改了一个全局变量,换言之,它修改了系统状态,当第二次输入相同参数的时候你会获得一个不同的结果。ide

不,这太让人难过了,这不是咱们想要的,咱们但愿咱们的函数足够纯净,相同的输入永远获得相同的输出。并且,不要作多余的事:
偷偷在console里打一个log
偷偷给某个api发送一个request
偷偷修改本地文件系统函数式编程

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息