如何开始函数编程的学习?

栏目: 数据库 · 发布时间: 6年前

内容简介:如果你习惯命令式语言(OOP),那么FP所有那些声明性代码片段可能会吓到你。确实,函数语言背后确实有很多复杂而美丽的数学。幺半群,仿函数,单子等等,但是你真的必须首先了解所有这些概念后才能开始函数编程吗?首先从第一个差异声明范式开始,声明式编程的重点是应该做什么事,而不是如何去做(后者是命令式编程)。命令式语言往往集中在一个程序的方法,明确如何实现具体操作及改变程序的状态,而声明式编程表达操作的逻辑(不要着眼于实现)。当我们谈论函数式编程时,这可能是最流行的例子之一。在第一个doubleAll函数中,我们

如果你习惯命令式语言(OOP),那么FP所有那些声明性代码片段可能会吓到你。确实,函数语言背后确实有很多复杂而美丽的数学。幺半群,仿函数,单子等等,但是你真的必须首先了解所有这些概念后才能开始函数编程吗?

首先从第一个差异声明范式开始,声明式编程的重点是应该做什么事,而不是如何去做(后者是命令式编程)。命令式语言往往集中在一个程序的方法,明确如何实现具体操作及改变程序的状态,而声明式编程表达操作的逻辑(不要着眼于实现)。


def doubleAll(arr):
doubles = []
for elem in arr:
doubles.append(elem*2)
return doubles

def doubleAll(arr):
return map(lambda elem: elem * 2, arr)

当我们谈论函数式编程时,这可能是最流行的例子之一。在第一个doubleAll函数中,我们确切地告诉计算机应该如何做,我们将每个数字的两倍追加到一个新数组中,但之后我们也可以执行另一个操作(例如,递增一些计数器,将其打印到控制台)。我们明确告诉机器如何做到这一点。关于第二个函数,我们不关心实施; 相反,我们专注于应该做什么,通过一个匿名函数map(该函数应用于一个数组,能创建一个新的数组,这个函数完全处理如何实现细节)。

其次,我会说人们应该理解不变性。这是使函数式编程与其他范例有很大不同的事情之一。

函数应被视为数据,这意味着您可以返回函数或将它们作为参数传递,甚至可以组合以获得所需的结果。因为它们是数据,所以它们也应该是纯粹的 ; 这意味着如果你有一个名为is-number它的函数,从字面上看,检查它是否是一个数字。不要试图隐瞒任何其他责任(例如打印到控制台,将一些记录添加到数据库):它必须按照它说的做。

如果要检查它是否为数字,然后将其提交到数据库(或任何其他日志记录材料),请创建另一个函数来访问数据库。然后,您可以将两者组合成所需的输出。当然会产生第三个,不合格 函数(数据库被认为是I / O,而且这个新函数不纯),但是,现在你有两个独立的函数,因此提高了代码的可维护性(和方便调试!)。


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

查看所有标签

猜你喜欢:

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

微交互

微交互

塞弗 (Dan Saffer) / 李松峰 / 人民邮电出版社 / 2013-11-1 / 35.00元

平庸的产品与伟大的产品差就差在细节上。作者Dan Saffer将通过这本书展示怎么设计微交互,即位于功能之内或周边的那些交互细节。你的手机怎么静音?你怎么知道有新邮件了?怎么修改应用的设置?诸如此类的交互细节,既可以毁掉一个产品,也可以成就一个产品。高效而有趣的微交互 ,涉及触发器、规则、循环和模式,还有反馈。透过书中生动、真实的设备及应用示例,读者将理解微交互对于塑造产品个性、赋予产品卖点的重要......一起来看看 《微交互》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

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

各进制数互转换器

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

HEX CMYK 互转工具