函数编程基本原理介绍

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

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

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

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

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

纯粹的函数

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

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

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

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

纯函数的好处

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

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

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

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

其他

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


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

查看所有标签

猜你喜欢:

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

The Art of Computer Programming, Volumes 1-3 Boxed Set

The Art of Computer Programming, Volumes 1-3 Boxed Set

Donald E. Knuth / Addison-Wesley Professional / 1998-10-15 / USD 199.99

This multivolume work is widely recognized as the definitive description of classical computer science. The first three volumes have for decades been an invaluable resource in programming theory and p......一起来看看 《The Art of Computer Programming, Volumes 1-3 Boxed Set》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具