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

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

内容简介:如果你习惯命令式语言(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,而且这个新函数不纯),但是,现在你有两个独立的函数,因此提高了代码的可维护性(和方便调试!)。


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

查看所有标签

猜你喜欢:

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

Java Web整合开发王者归来

Java Web整合开发王者归来

刘京华 / 清华大学 / 2010-1 / 99.80元

《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》全面介绍了Java Web开发中的各种相关技术及知识。全书分为9篇,内容层次清晰,难度循序渐进。第1篇为入门篇,内容包括Java Web开发概述等;第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JST......一起来看看 《Java Web整合开发王者归来》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

MD5 加密
MD5 加密

MD5 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具