一等函数与Applicative编程

简介: 一等函数与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}
目录
相关文章
|
1月前
|
存储 算法 数据处理
Python函数式编程
【10月更文挑战第12天】函数式编程是一种强大的编程范式,它可以帮助我们编写更加简洁、易读、可维护和高效的代码。虽然 Python 不是一种纯粹的函数式编程语言,但它提供了许多支持函数式编程的特性和功能。通过深入了解和掌握函数式编程的概念和技巧,我们可以在 Python 编程中更好地应用函数式编程的理念,提高我们的编程水平和代码质量。
15 2
|
6月前
|
Python
Python函数式编程自带函数
Python函数式编程自带函数
30 1
|
6月前
|
存储 缓存 自然语言处理
高阶函数离不开闭包
高阶函数离不开闭包
|
6月前
|
Serverless 开发者 Python
Python函数式编程:从概念到应用的完整指南
在 Python 中,函数式编程是一种流行且强大的编程范式,它不仅可以使代码更加简洁、优雅,而且还能提高程序的可读性和可维护性。本文将从基础概念入手,详细讲解 Python 函数式编程的核心思想、常用函数和实际应用。无论你是 Python 新手还是经验丰富的开发者,本文都能为你提供全面的参考和指导。
|
6月前
|
分布式计算 C语言 Python
都应该了解的Python函数式编程
都应该了解的Python函数式编程
|
存储 关系型数据库 Python
函数式编程:一等对象、作用域和高阶函数的综合指南
函数式编程:一等对象、作用域和高阶函数的综合指南
52 0
|
Go
高阶函数编程:探索Go语言中的函数一等公民
Go 函数一等公民。你是否听说过 `Go` 语言中的函数是一等公民?如果没有,那么恭喜你,本文将带你一起揭开这个神秘的面纱。如果你已经了解这个概念,你是否知道为什么 `Go` 语言中的函数被称为一等公民?不管你的答案是什么,通过阅读本文,你将对这个概念有更深入的了解。
93 0
高阶函数编程:探索Go语言中的函数一等公民
|
存储 程序员 API
10分钟学会python函数式编程
10分钟学会python函数式编程
|
存储 Python
【Python函数式编程】——闭包
一个函数定义中引入了函数定义以外的变量,并且该函数可以在其定义以外被执行,这样的一个函数称为闭包。
150 0
【Python函数式编程】——闭包
|
JavaScript 前端开发 索引
【重温基础】21.高阶函数
【重温基础】21.高阶函数
134 0