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

栏目: 数据库 · 发布时间: 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,而且这个新函数不纯),但是,现在你有两个独立的函数,因此提高了代码的可维护性(和方便调试!)。


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

查看所有标签

猜你喜欢:

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

重来

重来

[美] 贾森·弗里德、[丹] 戴维·海涅迈尔·汉森 / 李瑜偲 / 中信出版社 / 2010-10 / 36.00元

大多数的企业管理的书籍都会告诉你:制定商业计划、分析竞争形势、寻找投资人等等。如果你要找的是那样的书,那么把这本书放回书架吧。 这本书呈现的是一种更好、更简单的经商成功之道。读完这本书,你就会明白为什么计划实际上百害而无一益,为什么你不需要外界投资人,为什么将竞争视而不见反倒会发展得更好。事实是你所需要的比你想象的少得多。你不必成为工作狂,你不必大量招兵买马,你不必把时间浪费在案头工作和会议......一起来看看 《重来》 这本书的介绍吧!

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

RGB HEX 互转工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码