什么叫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装置,产生了副作用。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • h5网站模板_超全超实用的80个模板网站,我全部整理在这里了「建议收藏」

    h5网站模板_超全超实用的80个模板网站,我全部整理在这里了「建议收藏」如果你喜欢本文章,欢迎关注,评论和转发,谢谢!模板网站,可谓是当代最受欢迎的网站类型之一,只要提供的足够新颖能够满足需求,必然成为懒癌青年们的最爱。这些网站深受喜爱的原因是:大家想要实现某种设计需求,但窘于自己技术没达到,时间来不及现学现卖等诸多因素,反正就是做不出来。正当你焦头烂耳临近崩溃的时候,别人告诉你有现成又好看的模板,想问又有谁能拒绝呢?当然,模板网站不一定全是免费的,都需要你付出一些东…

    2022年7月19日
    16
  • 如何将Eclipse设置为中文版[通俗易懂]

    如何将Eclipse设置为中文版[通俗易懂]如何将Eclipse设置为中文版我们知道Eclipse一个开放源代码的、基于Java的可扩展开发平台,不管学习还是工作都是一款不错的集成开发环境(IDE),但是对于一些初学者看到Eclipse上

    2022年5月4日
    61
  • c语言socket通信

    c语言socket通信1. 前言网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。什么是SocketSocket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发T

    2022年7月13日
    13
  • 最全QQ盗号手法分析,全面防御QQ盗号[通俗易懂]

    最全QQ盗号手法分析,全面防御QQ盗号[通俗易懂]你的QQ是否被盗过号,或者你身边的朋友、同学是否有过被盗号的经历。如今的安全机制真的没有效吗?盗号真的这么简单吗?本期将彻底解决这一问题。本期是上一期的姊妹篇,建议先看上一期,这样对于攻击者的手法才有更好的理解:传送门常见的盗号手法1、诱导链接以及二维码  这种情况在QQ群里面见的多。通常是发送一些具有诱惑性的链接诱导你去点击。也可能会是一些二维码,如下图。为了做这期,能更好的了解其盗号的手段,我把凡是我看到的盗号链接都点了个遍,那些恶意二维码我也扫了个遍。这是我在了解其原理并做了相应的安全措施.

    2022年7月26日
    12
  • 用js来实现那些数据结构06(队列)

    其实队列跟栈有很多相似的地方,包括其中的一些方法和使用方式,只是队列使用了与栈完全不同的原则,栈是后进先出原则,而队列是先进先出(FirstInFirstOut)。一、队列队列是一种特殊的线

    2022年3月25日
    32
  • VS2008工具栏看不到配置管理器或者解决方案配置

    VS2008工具栏看不到配置管理器或者解决方案配置Vs2008工具栏看不到配置管理器或者解决方案配置,很不方便,看不出来是是Debug还是Release。解决方法如下:1、工具-选项-项目和解决方案-常规,勾选显示高级生成配置。2、如果第一步没有效果,那么可以在工具栏上点击右键,选择自定义,在命令选项卡中找到生成,然后在右侧的命令中找到这两项,直接拖动到工具栏。

    2022年7月20日
    13

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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