纯函数学习 (一)什么是纯函数

1.前言:

纯函数的定义是这样的:

纯函数是这样一种函数,即相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用。

所以我们可以看出纯函数的定义:

  • 相同输入必定能得出相同输出。
  • 函数执行过程中没有任何副作用。

下面让我们来围绕这两点来学习纯函数。

2.辨认纯函数

纯函数和非纯函数的辨认是很难的,写的时候我们就会会出现疑惑导致出现错误,这里我将举个例子来说明它们间的区别

/*** 下面例子是个正例(Positive ),* 我们可以看出slice函数输入相同的情况下输出必定相同,* 而且并不会对array造成影响(内部元素并不会变化)并且也不会对其他环境造成可预见的影响,* 所以我们可以说slice是纯函数**/
let array = [0,1,2,3,4];array.slice(0,3);//[0,1,2]
array.slice(0,3);//[0,1,2]
console.log(array);//[0,1,2,3,4]/***    下面例子是个反例(negative),*   可以看见纵使输入相同输出是不定的,*   并且函数修改了原始数组(副作用),* 这是个完美的非纯函数**/
let array2 = [0,1,2,3,4];
array.splice(0,3);//[0,1,2]
array.splice(0,3);//[3,4]
console.log(array);//[]

从上面的例子就能很容易看出所谓副作用就是:

在计算结果的过程中,系统状态的一种变化,或者与外部世界进行的可观察的交互

副作用可能包含,但不限于:

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

副作用让一个函数变得不纯是有道理的:从定义上来说,纯函数必须要能够根据相同的输入返回相同的输出;如果函数需要跟外部事物打交道,那么就无法保证这一点了。

3.结语

以上就是纯函数的定义阐述,从这里的初步了解我们可以看出纯函数是个非常特殊的“工具”,自带“不动”和“避世”属性,这就让纯函数有很多独特的特性,明天我将带大家学习为什么要使用纯函数。

纯函数学习 (一)什么是纯函数相关推荐

  1. matlab中的pause是什么意思,【Matlab学习笔记】【函数学习】一(延时函数pause)...

    采用MATLAB中的延时函数pause: Halt execution temporarily 使用方法: pause pause(n) pause on pause off 函数描述: pause, ...

  2. C#函数学习及常用的类

    C#函数学习及常用的类 函数:能够独立完成某个功能的模块. 好处:1.结构更清析(编写.维护方便 ).2.代码重用.3.分工开发. 四要素:名称,输入(参数),输出(返回的类型),加工(函数体) 语法 ...

  3. Android kotlin run函数学习

    继续来看一下kotlin中run函数的应用,首先看一下源码: /*** Calls the specified function [block] and returns its result.** F ...

  4. C++学习12:C++多态、虚函数、虚析构函数、纯虚函数、抽象类

    一 多态概述 C++中的多态分为静态多态和动态多态.静态多态是函数重载,在编译阶段就能确定调用哪个函数.动态多态是由继承产生的,指同一个属性或行为在基类及其各派生类中具有不同的语义,不同的对象根据所接 ...

  5. 构造函数不可以是虚函数;析构函数可以是虚函数,也可以是纯虚函数。

    构造函数不可以是虚函数:析构函数可以是虚函数,也可以是纯虚函数. 一:构造函数不能声明为虚函数的原因 1 构造一个对象的时候,必须知道对象的实际类型,而虚函数行为是在运行期间确定实际类型的. 而在构造 ...

  6. java中所有函数都是虚函数_关于Java:虚拟函数与纯虚函数之间的区别是什么?...

    本问题已经有最佳答案,请猛点这里访问. Possible Duplicate: C++ Virtual/Pure Virtual Explained 虚函数和纯虚函数有什么区别? CPP中的纯虚函数与 ...

  7. 没有varselect这个函数_C++的虚函数,虚析构函数,纯虚函数

    修改日期:2020/9/6 C++的虚函数 C++的虚函数的特点就是动态绑定,它的意思是动态绑定,在运行的时候,通过引用和指针,可以用基类的类,引用继承该c++类的派生类,虽然指针是基类,但实际上运行 ...

  8. 基类、派生类、虚基类、虚函数、虚析构、纯虚函数、抽象类

    基类:被其它类通过继承方式作为父类继承的类称为基类:描述派生类的统一种类的方式. 派生类:通过继承其他类(并可能含有自定义成员)实现的子类:为提高代码的重用性及与同样继承于同一个父类的其它类形成统一种 ...

  9. C++——虚函数、虚析构函数、纯虚函数、抽象类

    目录 一.虚函数 1.什么是虚函数? 2.虚函数的作用 3.虚函数的参数 4.虚函数代码示例 二.虚析构函数 1.什么是虚析构函数? 2.虚析构函数的作用 3. 构造函数 4.为什么构造函数不能是虚函 ...

最新文章

  1. CH - 0502 七夕祭(思维+中位数优化+前缀和优化)
  2. 从数组中删除最后一项
  3. docker学习3-虚拟网络模式
  4. python3实用编程技巧_Python3实用编程技巧进阶一
  5. 实例讲解木马的分析方法
  6. 计算机网络第二章 韩立刚
  7. 怎么把柱形图和折线图放在一起_excel怎么把柱状图和折线图合并
  8. 记录自己的鬼压床——长发
  9. python实现支持向量机实例_一个简单的案例带你了解支持向量机算法(Python代码)...
  10. SpringCloud Day12---SpringCloud Alibaba Sentinel 服务熔断与限流
  11. WIN XP SP2系统经常性死机问题解决历程
  12. SCI期刊名缩写查询
  13. [Mysql] SQL的书写顺序与执行顺序
  14. 上海市房管局:物业公司信用将能手机查询
  15. 彻底清除已删除的文件
  16. 基于EasyNVR摄像机网页无插件直播服务二次开发实现H5播放页面的简单集成方案
  17. 安卓逆向——Dalvik虚拟机操作码
  18. Android /iPhone/iPad UI之常用图标尺寸规范
  19. 卡尔曼滤波(Kalman Filter)原理理解和测试
  20. matlabTDOA定位

热门文章

  1. 解决:Required request body is missing
  2. Doxygen (1): 安装及设置
  3. 16、持续集成流水线实践:流水线上的AI单元测试(MAVEN)
  4. [AV1] AV1 Specification
  5. 日服人物一览(按实装版本倒序)
  6. 微信小程序开发类似微博回复功能自带云开发数据库(无限回复)
  7. PatchWork组织Herbminister行动武器库大揭秘
  8. 百度智能云体验馆领取CDN及24小时急速收录
  9. linux 装tomcat吗,linux下安装tomcat的默认安装目录在哪?
  10. 读《why programs fail》的闲话