美文网首页
函数式编程笔记

函数式编程笔记

作者: fish_yijinc | 来源:发表于2019-07-24 10:52 被阅读0次

函数式编程笔记

函数是一等公民

函数是 一等公民 实际上说的是它们和其他对象都一样,你可以像对待任何其他数据类型一样对待它们——把它们存在数组里,当作参数传递,赋值给变量...等等

用一个函数把另一个函数包起来,再调用执行,真的是非常糟糕的编程习惯。然而,到处都充斥着这样糟糕的代码

ajax(response => callback(response))
// 等价于
ajax(callback)


onClick = () => { handleClick() }
// 等价于
onClick = handleClick


setTimeout(() => { doSomething() }, 3000)
// 等价于
setTimeout(doSomething, 3000)


renderItem = item => { doRenderItem(item) }
// 等价于
renderItem = doRenderItem

我们来看看为何要推荐函数作为一等公民写法

const callback = json => { use(json) };

// 方式一
ajax('list/2', json => callback(json));

// 等价于 方式二
ajax(callback);

显然 方式一 只是徒增代码量,这时,如果callback需要添加一个参数,那么包裹它的那个函数也要做相应的变更。

添加 err 参数
const callback = (err, json) => { };

// 方式一 跟着添加 err 参数
ajax('list/2', (err, json) => callback(err, json));

// 方式二 // 一等公民函数的形式,不需要做任何修改
ajax(callback);

一等公民的方式被调用 ,很多时候 我们需要小心 this 指向

const handle = () => { console.log(this) }
// 
onClick = handle.bind(this)

纯函数

纯函数是相同的输入,必定得到相同的输出,即它不依赖于程序执行期间函数外部任何状态或数据的变化,必须只依赖于其输入参数。且该函数不会产生任何可观察的副作用。

看个例子

// 不纯的
var max = 100;

var isValid = function(num) {
  return num <= max;
};


// 纯的
var isValid = function(num) {
  var max = 100;
  return num <= max;
};

在不纯的版本中,isValid 的结果将取决于 外部 max 这个可变变量的值。输入值之外的 max能够左右 isValid 的返回值,使用纯函数的形式,函数就能做到自给自足

纯函数就像数学上的函数,是一种输入到输出的映射,且y的值总是能由 x 唯一确定
y = f(x)

副作用可能包含:

  • 更改文件系统
  • 往数据库插入记录
  • 发送一个 http 请求
  • 可变数据
  • 打印/log
  • 获取用户输入
  • DOM 查询
  • 访问系统状态

使用纯函数的好处有:
可缓存:在计算量大的函数中,实现缓存的一种典型方式是 memoize 技术
可测试:

相关文章

  • Scala 学习笔记

    Scala 学习笔记 1.函数式编程 函数式编程:函数式编程把函数当作一等公民,充分利用函数,支持函数的多种使用方...

  • Java 8函数式编程学习笔记

    Java 8函数式编程学习笔记 author:Gavin date:2018/11/09 什么是函数式编程 在思考...

  • 函数式编程

    拉勾大前端的笔记,仅作为学习记录 课程介绍 为什么学习函数式编程,以及什么是函数编程 函数式编程的特性(纯函数,柯...

  • RxSwift初探(1)

    一、前提:函数响应式编程思想 简单来说 函数响应式编程 = 函数式编程 + 响应式编程 (1)函数式 函数式编程是...

  • iOS 函数编程 & 链式编程

    函数式(链式)编程 函数式编程概念 函数式编程是种编程范式 函数式编程 Functional Programmin...

  • python函数式编程

    备注 本篇为慕课网python进阶教程中函数式编程章节的笔记。 简介 函数式编程允许将函数作为输入(参数)输出(返...

  • 函数式编程小思考4.2 笔记

    函数式编程小思考4 笔记JS函数式编程指南Data.Task 函子 源码 补充两个内容 用得到的curry函数 文...

  • Functional Programming

    本笔记来自廖雪峰 函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个...

  • 函数式编程(一)—— 前置知识

    为什么要学函数式编程? 什么是函数式编程?函数式编程和面向对象编程的不同对于函数式编程思维方式的理解: 函数式编程...

  • 二十二、函数式编程、面向协议式编程

    函数式编程(Functional Prigramming) 函数式编程 函数式编程(Functional Prig...

网友评论

      本文标题:函数式编程笔记

      本文链接:https://www.haomeiwen.com/subject/cjwtrctx.html