一等函数与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}
目录
相关文章
|
5月前
|
Python
全网最适合入门的面向对象编程教程:Python函数方法与接口-函数与方法的区别和lamda匿名函数
【9月更文挑战第15天】在 Python 中,函数与方法有所区别:函数是独立的代码块,可通过函数名直接调用,不依赖特定类或对象;方法则是与类或对象关联的函数,通常在类内部定义并通过对象调用。Lambda 函数是一种简洁的匿名函数定义方式,常用于简单的操作或作为其他函数的参数。根据需求,可选择使用函数、方法或 lambda 函数来实现代码逻辑。
|
6月前
|
存储 开发者 Python
探索代码的奥秘:从变量到函数的编程之旅
【8月更文挑战第31天】本文将带你走进编程的世界,从基础的变量概念出发,逐步深入到复杂的函数设计。我们将通过实际的代码示例,探讨如何高效地组织和复用代码,以及在面对复杂问题时如何应用模块化思维来简化解决方案。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和启发,帮助你更好地理解编程语言的内在逻辑和美学。
|
9月前
|
存储 编译器 C++
C++程序中的函数调用:模块化编程的基石
C++程序中的函数调用:模块化编程的基石
83 1
|
9月前
|
存储 编译器 C语言
“编程界的隐形斗篷:C语言作用域与生命周期的喜怒哀乐”
“编程界的隐形斗篷:C语言作用域与生命周期的喜怒哀乐”
|
9月前
|
Serverless 数据处理 Python
Python函数式编程:理解与实践
Python函数式编程是一种高阶编程范式,它强调函数的纯洁性和不可变性,使得代码更易于理解、维护和扩展。本文将深入探讨Python函数式编程的概念和应用,介绍函数式编程的基本特性、常用函数和实际应用场景,并通过具体案例演示如何使用Python实现函数式编程。
171 6
|
9月前
|
Serverless 开发者 Python
Python函数式编程:从概念到应用的完整指南
在 Python 中,函数式编程是一种流行且强大的编程范式,它不仅可以使代码更加简洁、优雅,而且还能提高程序的可读性和可维护性。本文将从基础概念入手,详细讲解 Python 函数式编程的核心思想、常用函数和实际应用。无论你是 Python 新手还是经验丰富的开发者,本文都能为你提供全面的参考和指导。
|
Go
高阶函数编程:探索Go语言中的函数一等公民
Go 函数一等公民。你是否听说过 `Go` 语言中的函数是一等公民?如果没有,那么恭喜你,本文将带你一起揭开这个神秘的面纱。如果你已经了解这个概念,你是否知道为什么 `Go` 语言中的函数被称为一等公民?不管你的答案是什么,通过阅读本文,你将对这个概念有更深入的了解。
110 0
高阶函数编程:探索Go语言中的函数一等公民
|
存储 索引 Python
函数之道:探索python函数的奥秘
函数之道:探索python函数的奥秘
|
存储 关系型数据库 Python
函数式编程:一等对象、作用域和高阶函数的综合指南
函数式编程:一等对象、作用域和高阶函数的综合指南
64 0