内容简介:经过很长一段时间的学习和面向对象编程的工作,我退后一步思考系统的复杂性。“复杂性是任何使软件难以理解或修改的东西” - 约翰奥特豪特做了一些研究以后,我发现了函数式编程概念,如不变性和纯函数。这些概念是构建无副作用功能的巨大优势,因此维护系统更容易 - 还有其他一些
经过很长一段时间的学习和面向对象编程的工作,我退后一步思考系统的复杂性。
“复杂性是任何使软件难以理解或修改的东西” - 约翰奥特豪特
做了一些研究以后,我发现了函数式编程概念,如不变性和纯函数。这些概念是构建无副作用功能的巨大优势,因此维护系统更容易 - 还有其他一些 好处 。
纯粹的函数
当我们想要理解函数式编程时,我们学到的第一个基本概念是纯函数。但这究竟意味着什么?是什么让一个函数纯洁?这是一个非常严格的纯度定义:
- 如果给出相同的参数,它返回相同的结果(也称为deterministic确定性)
- 它不会引起任何可观察到的副作用
如果你的函数中使用了全局对象则为不纯;如果我们的函数读取外部文件,它不是纯函数 - 文件的内容可以更改;任何依赖于随机数生成器的函数都不可能是纯粹的。
每个函数都是孤立的,无法影响我们系统的其他部分。纯函数是稳定,一致和可预测的。给定相同的参数,纯函数将始终返回相同的结果。是否会发生相同的参数具有不同的结果?我们不需要考虑这种情况 - 因为它永远不会发生。
纯函数的好处
代码肯定更容易测试。我们不需要模仿任何东西。所以我们可以用不同的上下文单元测试纯函数:
- 给定参数A→期望函数返回值B
- 给定参数C→期望函数返回值D
不变性: 随着时间的推移不变或无法改变。当数据不可变时,其在创建后就不能被更改。如果要更改不可变对象,使用新值重新创建一个新对象。
引用透明:纯函数+不可变数据=引用透明。基本上,如果函数对于相同的输入始终产生相同的结果,则它是引用透明的。
其他
使用懒惰加载,保持不变性,实现函数组合,禁止空对象,禁止抛出异常等等。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Fishhook替换C函数的原理
- 交叉熵损失函数到底是什么原理?
- 【译】JavaScript 中的函数式编程原理
- jQuery $ 原理及extend函数源码实现
- 深度学习常用损失函数总览:基本形式、原理、特点
- PHP 中函数禁用绕过的原理与利用
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Web Security, Privacy and Commerce, 2nd Edition
Simson Garfinkel / O'Reilly Media / 2002-01-15 / USD 44.95
Since the first edition of this classic reference was published, World Wide Web use has exploded and e-commerce has become a daily part of business and personal life. As Web use has grown, so have ......一起来看看 《Web Security, Privacy and Commerce, 2nd Edition》 这本书的介绍吧!