什么叫pure function(纯函数)[通俗易懂]

什么叫pure function(纯函数)[通俗易懂]在Knockout中,用到了pureComputer(),其原理来自于纯函数(purefunction)。那么,什么叫纯函数呢?纯函数(来自:http://en.wikipedia.org/wiki/Pure_function)     在计算机编程中,假如满足下面这两个句子的约束,一个函数可能被描述为一个纯函数:给出同样的参数值,该函数总是求出同样的结果。该函数结

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

在Knockout中,用到了pureComputer(),其原理来自于纯函数(pure function)。那么,什么叫纯函数呢?

纯函数

(来自:http://en.wikipedia.org/wiki/Pure_function

      在计算机编程中,假如满足下面这两个句子的约束,一个函数可能被描述为一个纯函数:

  1. 给出同样的参数值,该函数总是求出同样的结果。该函数结果值不依赖任何隐藏信息或程序执行处理可能改变的状态或在程序的两个不同的执行,也不能依赖来自I/O装置的任何外部的输入(通常是这样的–看下面的描述)。
  2. 结果的求值不会促使任何可语义上可观察的副作用或输出,例如易变对象的变化或输出到I/O装置。


      该结果值不需要依赖所有(或任何)参数值。然而,必须不依赖参数值以外的东西。函数可能返回多重结果值,并且对于被认为是纯函数的函数,这些条件必须应用到所有返回值。假如一个参数通过引用调用,任何内部参数变化将改变函数外部的输入参数值,它将使函数变为非纯函数。

例如:
纯函数

  • sin(x),返回实数x的sin值
  • length(s),返回串s的大小
  • encrypt(k,d),运行一个使用key k 关于日期片d的确定加密算法


非纯函数

  • 返回当前天星期几的函数是一个非纯函数,因为在不同的时间它将产生不同的结果,它引用了一些全局状态。同样地,任何使用全局状态或静态变量潜在地是非纯函数。
  • random()是非纯函数,因为每次调用潜在地产生不同的值。这是因为伪随机数产生器使用和更新了一个全局的“种子”状态。加入我们修改它去拿种子作为参数,例如random(seed),那么random变为纯函数,因为使用同一种子值的多次调用返回同一随机数。
  • printf() 是非纯函数,因为它促使输出到一个I/O装置,产生了副作用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234184.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • vue.js 添加 fastclick的支持

    vue.js 添加 fastclick的支持fastclick:处理移动端click事件300毫秒延迟1、兼容性iOS3及更高版本的移动SafariiOS5及更高版本的ChromeAndroid上的Chrome(ICS)OperaMobile11.5及以上版本Android2以来的Android浏览器PlayBookOS1及以上版本2、不应用FastClick的场景桌面浏览器;如果视口元标签中设置了width=

  • java 工厂的变形模拟的各种应用

    java 工厂的变形模拟的各种应用

  • ubuntu16.04 安装 Eric6「建议收藏」

    从安装qt,到安装qtpy,到安装Eric6,这是一个很痛苦的过程。总是会有一大段的错误,然后在网上各种搜索,然后去改,然后还是有新的错误,又去找答案,一直重复,我都快崩溃了。最后,终于,找到这一篇博客:http://blog.csdn.net/suxiang198/article/details/52042526。这篇博客解决了大部分坑,不过到后面部分还是出现了问题,安装不上去。最后,终于在E

  • map改变一个字母是什么_组合总和 leetcode

    map改变一个字母是什么_组合总和 leetcode原题链接给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[ [“ate”,”eat”,”tea”], [“nat”,”tan”], [“bat”]]说明:所有输入均为小写字母。不考虑答案输出的顺序。tclass Solution {public: vector<vector<string>> g

  • linux iptable命令用法

    linux iptable命令用法iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。语法iptables(选项)(参数)选项-t&lt;表&gt;:指定要操纵的表;-A:向规则链中添加条目;-D:从规则链中删除条目;-i:向规则链中插入条目;-R:替换规则链中的条目;-L:显示规则链中已有的条目;-F:清楚规则链中已…

  • linux下如何保存退出vim编辑器

    linux下如何保存退出vim编辑器命令:vimapp.py如果不存在app.py则会自动创建1.进入编辑器后按字母“i”即可进入编辑状态(此时左下角会出现 “插入”)2.退出的时候分为4种情况:保存退出、正常退出、不保存退出以及强制退出 2.1:保存退出:按“Esc”键后此时的“插入”会消失,然后按Shift+zz就可以保存修改内容并退出 2.2:不保存退出:当修改修改了一部分内容后发现修改错了,此时就会进行不保存退…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号