光环大数据培训 JavaScript 函数式编程介绍
光环大数据(大数据培训的专业机构), 以往经常看到”函数式编程“这一名词,却始终没有花时间去学习,暑期实习结束之后一直忙于边养老边减肥,81天成功瘦身30斤+,开始回归正常的学习生活。
便在看《JavaScript函数式编程》这本书,以系统了解函数式编程的知识。本文试图尽可能系统的描述JavaScript函数式编程。当然认识暂时停留于本书介绍的程度,如有错误之处,还请指正。
注:本书采用的函数式库Underscore。一下部分代码运行时,需引入Underscore。
函数式编程简介
我们用一句话来直白的描述函数式编程:
函数式编程通过使用函数来将值转换成抽象单元,接着用于构建软件系统。
概括的来说,函数式编程包括以下技术
-确定抽象,并为其构建函数
-利用已有的函数来构建更为复杂的抽象
-通过将现有的函数传给其他函数来构建更加复杂的抽象
注:JavaScript并不仅限于函数式编程语言,以下是另外3种常用的编程方式。
-命令式编程:通过详细描述行为的编程方式
-基于原型的面向对象编程:基于原型对象及其实例的编程方式
-元编程:对JavaScript执行模型数据进行编写和操作的编程方式
函数式编程的一些特性
纯函数
纯函数坚持以下属性(坚持纯度的标准不仅将有助于使程序更容易测试,也更容易推理。)
-其结果只能从它的参数的值来计算
-不能依赖于能被外部操作改变的数据
-不能改变外部状态
不变性——没有副作用
所谓”副作用”(sideeffect),指的是函数内部与外部互动(最典型的情况,就是修改全局变量的值),产生运算以外的其他结果。
函数式编程强调没有”副作用”,意味着函数要保持独立,所有功能就是返回一个新的值,没有其他行为,尤其是不得修改外部变量的值。
不修改状态
上一点已经提到,函数式编程只是返回新的值,不修改系统变量。因此,不修改变量,也是它的一个重要特点。在其他类型的语言中,变量往往用来保存”状态”(state)。不修改变量,意味着状态不能保存在变量中。
函数式编程使用参数保存状态,最好的例子就是递归。下面的代码是一个将字符串逆序排列的函数,它演示了不同的参数如何决定了运算所处的”状态”。
functionreverse(string){
if(string.length==0){
returnstring;
}else{
returnreverse(string.substring(1,string.length))+string.substring(0,1);
}
}
函数是一等公民
“一等”这个术语通常用来描述值。当函数被看作“一等公民”时,那它就可以去任何值可以去的地方,很少有限制。比如数字在Javascript里就是一等公民,同程
作为一等公民的函数就会拥有类似数字的性质。
varfortytwo=function(){return42}//函数与数字一样可以存储为变量
varfortytwo=[32,function(){return42}]//函数与数字一样可以存储为数组的一个元素
varfortytwo={number:32,fun:function(){return42}}//函数与数字一样可以作为对象的成员变量
32+(function(){return42})()//函数与数字一样可以在使用时直接创建出来
//函数与数字一样可以被传递给另一个函数
functionweirdAdd(n,f){returnn+f()}
weirdAdd(32,function(){return42})
//函数与数字一样可以被另一个函数返回
return32;
returnfunction(){return42}
Applicative编程
Applicative编程是特殊函数式编程的一种形式。Applicative编程的三个典型例子是map,reduce,filter
函数A作为参数提供给函数B。(即定义一个函数,让它接收一个函数,然后调用它)
_.find(["a","b",3,"d"],_.isNumber)//_.find与_.isNumber都是Underscore中的方法
//自行实现一个Applicative函数
functionexam(fun,coll){
returnfun(coll);
}
//调用
exam(function(e){
returne.join(",")
},[1,2,3])
//结果”1,2,3“
大数据+时代,大数据培训机构,就选光环大数据!
原创文章,转载请注明出处:光环大数据官网。
大数据培训、人工智能培训、Python培训、大数据培训机构、大数据培训班、数据分析培训、大数据可视化培训,就选光环大数据!光环大数据,聘请专业的大数据领域知名讲师,确保教学的整体质量与教学水准。讲师团及时掌握时代潮流技术,将前沿技能融入教学中,确保学生所学知识顺应时代所需。通过深入浅出、通俗易懂的教学方式,指导学生更快的掌握技能知识,成就上万个高薪就业学子。 更多问题咨询,欢迎点击------>>>>在线客服!