一等函数与Applicative编程

函数是一等公民

函数式编程中,函数被当作一等公民,可以去任何值去的地方,很少有限制。
例如
函数可以与数字一样存储为变量

var fortytwo = function(){  return 42; }

函数与数字一样可以存储为数组的一个元素

var fotytwos = [42,function(){ return 42}]

函数与数字一样可以作为对象的成员变量

var fortytwos = { number:42,fun:function(){ return 42;}}

函数与数字一样可以在使用的时候被直接创建出来

42 + ( function(){ return 42});

函数与数字一样可以被传递给另外一个函数

function weirAdd(n,f){ return n + f()};
weirdAdd(42,function(){ return 42;})

函数与数字一样可以被另外一个函数返回

return 42;
return function(){ return 42;}

高阶函数

  1. 以一个函数作为参数
  2. 返回一个函数作为结果
    例如:
_.each(["boy","girl","decision"],function(word){
        console.log(word.charAt(0).toUpperCase() + word.substr(1));
});

Aplicative编程

Applicative编程定义为函数A作为参数提供给函数B.三个典型的例子是map,reduce和filter.

var nums = [1,2,3,4,5];
function doubleAll(array){
  return _.map(array,function(n){
     return n *2;
  });}; 
  doubleAll(nums); function average(array){ 
    var sum = _.reduce(array,function(a,b){return a + b;});
    return sum / _.size(array);
  }  
  average(nums); 
  function onlyEven(array){
     return _.filter(array,function(n){
        return (n%2) === 0;
    });
  } 
  onlyEven(nums);

_.map 遍历集合并对其每一个值调用一个函数,反悔结果的集合
_.reduce 利用函数将值的集合合并成一个值,该函数接受一个积累值和本次处理的值
_.filter 对集合的每一个值调用一个谓词函数(返回true或false的函数),抽取谓词函数返回true的值的集合。
_.reduceRight 从右到左的运算
_.find 接受一个集合和一个谓词函数,并返回该谓词为true时的第一个元素

_.find(['a','b',3,'d'],_.isNumber) //=> 3

reject 本质上是_.filter的逆
all 接受一个集合和一个谓词

_.all([1,2,3,4],_.isNumber); //=>true

any 接受一个集合和一个谓词

_.any([1,2,'c',4],_.isString); //=>true

sortBy,groupBy和countBy

var people = [{name:"Rick",age:30},{name:"Jaka",age:24}]; 
_.sortBy(people,function(p){ return p.age}); //=>[{"name":"Jaka",age:24},{name:"Rick",age:30}];
  var albums=[{title:"Sabbatch Bloody Sabbatch",genre:"Metal"},{title:"Scientist",genre:"Dub"},{title:"Undertow",genre:"Metal"}]; 
  _.groupBy(albums,function(a){ return a.genre}); 
  //=> {
  //=>  Metal:[{title:"Sabbatch Bloody Sabbatch",genre:"Mental"},
  //=> {title:"Undertow",genre:"Metal"}],
  //=> Dub:[{title:"Scientist",genre:"Dub"}] } 
_.countBy(albums,function(a){ return a.genre});
   //=> {Metal:2,Dub:1}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值