函数编程基本原理介绍

栏目: 编程语言 · 发布时间: 7年前

内容简介:经过很长一段时间的学习和面向对象编程的工作,我退后一步思考系统的复杂性。“复杂性是任何使软件难以理解或修改的东西” - 约翰奥特豪特做了一些研究以后,我发现了函数式编程概念,如不变性和纯函数。这些概念是构建无副作用功能的巨大优势,因此维护系统更容易 - 还有其他一些

经过很长一段时间的学习和面向对象编程的工作,我退后一步思考系统的复杂性。

“复杂性是任何使软件难以理解或修改的东西” - 约翰奥特豪特

做了一些研究以后,我发现了函数式编程概念,如不变性和纯函数。这些概念是构建无副作用功能的巨大优势,因此维护系统更容易 - 还有其他一些 好处

纯粹的函数

当我们想要理解函数式编程时,我们学到的第一个基本概念是纯函数。但这究竟意味着什么?是什么让一个函数纯洁?这是一个非常严格的纯度定义:

  • 如果给出相同的参数,它返回相同的结果(也称为deterministic确定性)
  • 它不会引起任何可观察到的副作用

如果你的函数中使用了全局对象则为不纯;如果我们的函数读取外部文件,它不是纯函数 - 文件的内容可以更改;任何依赖于随机数生成器的函数都不可能是纯粹的。

每个函数都是孤立的,无法影响我们系统的其他部分。纯函数是稳定,一致和可预测的。给定相同的参数,纯函数将始终返回相同的结果。是否会发生相同的参数具有不同的结果?我们不需要考虑这种情况 - 因为它永远不会发生。

纯函数的好处

代码肯定更容易测试。我们不需要模仿任何东西。所以我们可以用不同的上下文单元测试纯函数:

  • 给定参数A→期望函数返回值B
  • 给定参数C→期望函数返回值D

不变性: 随着时间的推移不变或无法改变。当数据不可变时,其在创建后就不能被更改。如果要更改不可变对象,使用新值重新创建一个新对象。

引用透明:纯函数+不可变数据=引用透明。基本上,如果函数对于相同的输入始终产生相同的结果,则它是引用透明的。

其他

使用懒惰加载,保持不变性,实现函数组合,禁止空对象,禁止抛出异常等等。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算复杂性

计算复杂性

阿罗拉 巴拉克 / 骆吉洲 / 机械工业出版社 / 2016-1-1 / 129元

《计算复杂性的现代方法》是一部将所有有关复杂度知识理论集于一体的教程。将最新进展和经典结果结合起来,是一部很难得的研究生入门级教程。既是相关科研人员的一部很好的参考书,也是自学人员很难得的一本很好自学教程。本书一开始引入该领域的最基本知识,然后逐步深入,介绍更多深层次的结果,每章末都附有练习。对复杂度感兴趣的人士,物理学家,数学家以及科研人员这本书都是相当受益。一起来看看 《计算复杂性》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

MD5 加密
MD5 加密

MD5 加密工具