一等函数与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}
目录
相关文章
|
4月前
|
Python
Python函数式编程自带函数
Python函数式编程自带函数
23 1
|
4月前
|
Serverless 开发者 Python
Python函数式编程:从概念到应用的完整指南
在 Python 中,函数式编程是一种流行且强大的编程范式,它不仅可以使代码更加简洁、优雅,而且还能提高程序的可读性和可维护性。本文将从基础概念入手,详细讲解 Python 函数式编程的核心思想、常用函数和实际应用。无论你是 Python 新手还是经验丰富的开发者,本文都能为你提供全面的参考和指导。
|
4月前
|
开发者 Python
Python函数式编程
Python函数式编程
41 2
|
4月前
|
分布式计算 C语言 Python
都应该了解的Python函数式编程
都应该了解的Python函数式编程
|
12月前
|
存储 关系型数据库 Python
函数式编程:一等对象、作用域和高阶函数的综合指南
函数式编程:一等对象、作用域和高阶函数的综合指南
38 0
|
Go
高阶函数编程:探索Go语言中的函数一等公民
Go 函数一等公民。你是否听说过 `Go` 语言中的函数是一等公民?如果没有,那么恭喜你,本文将带你一起揭开这个神秘的面纱。如果你已经了解这个概念,你是否知道为什么 `Go` 语言中的函数被称为一等公民?不管你的答案是什么,通过阅读本文,你将对这个概念有更深入的了解。
88 0
高阶函数编程:探索Go语言中的函数一等公民
|
存储 程序员 API
10分钟学会python函数式编程
10分钟学会python函数式编程
|
存储 编译器 C语言
C语言编程—函数的介绍
函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。 您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。 函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。 C 标准库提供了大量的程序可以调用的内置函数。例如,函数 strcat() 用来连接两个字符串,函数 memcpy() 用来复制内存到另一个位置。 函数还有很多叫法,比如方法、子例程或程序,等等。
154 0
|
设计模式 算法 Java
当函数成为一等公民时,设计模式的变化
当函数成为一等公民时,设计模式的变化
当函数成为一等公民时,设计模式的变化
|
程序员 C语言
程序员之路:C语言内部函数与外部函数
程序员之路:C语言内部函数与外部函数
253 0