许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  函数式编程范式(Functional Paradigm)简述

函数式编程范式(Functional Paradigm)简述

阅读数 4
点赞 0
article_banner

函数 化编程(functional paradigm)简述

主要借鉴及安利——《函数式编程指北》

what 什么是函数编程

面向过程的程序设计,思想更接近于数学计算——百科 就是一个表达式——知乎 一个通用事件的步骤都封装在一条指令里,一条指令就一个动作,根据作者的范畴论,只要沿着箭头的步骤添加相关指令就能实现这个范畴的功能,这样其实是大大简化了编程的难度——阮一峰 相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用——Franklin Risby

why 好处都有啥

  • 让结果的产生过程更容易追踪
  • 优化代码结构与流程,便于维护

how 如何实现

实现过程有很多:

  • 使用“纯”函数
  • 柯里(curry)化
  • 函数组合

纯函数

纯函数是这样一种函数,即相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用。
例子
var xs = [1,2,3,4,5];

// 纯的
xs.slice(0,3);
//=> [1,2,3]

xs.slice(0,3);
//=> [1,2,3]

xs.slice(0,3);
//=> [1,2,3]


// 不纯的
xs.splice(0,3);
//=> [1,2,3]

xs.splice(0,3);
//=> [4,5]

xs.splice(0,3);
//=> []
//--------------------------------
// 不纯的
var minimum = 21;

var checkAge = function(age) {
  return age >= minimum;
};


// 纯的
var checkAge = function(age) {
  var minimum = 21;
  return age >= minimum;
};
优越性
  • 可缓存 (memoize)
  • 可移植 (低依赖、易读)
  • 易测试 (结果唯一)
  • 易移植 (完全可以把函数内代码粘贴出来使用)

柯里化

只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。
例子
var add = function(x) {
  return function(y) {
    return x + y;
  };
};

var increment = add(1);
var addTen = add(10);

increment(2);
// 3

addTen(2);
// 12
优越性
  • 参数、代码复用
  • 延迟运行
  • 提前校验入参

除了部分情况下性能略差一些,不过基本可以忽略不计

函数组合

搭配不同的函数,将其组合成另一函数

var compose = function(f,g) {
  return function(x) {
    return f(g(x));
  };
};

var g = function(x){ return x.length; };
var f = function(x){ return x === 4; };
var isFourLetterWord = compose(f, g);
isForeLetterWord('abcd') // true
isForeLetterWord('abc') // false

var id = function(x){ return x; };

// identity
compose(id, f) == compose(f, id) == f;
// true
优越性
  • pointfree(无需定义更多变量)
  • 便于调试
  • 符合范畴学


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空