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

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


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

查看所有标签

猜你喜欢:

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

闪魂FLASH8网站建设实录

闪魂FLASH8网站建设实录

马谧铤 / 中国林业 / 2006-7 / 46.00元

《闪魂FLASH8网站建设实录》旨在提供以Flash(Flash 8.0为创作工具)为技术核心的整套互动网站的开发思路,其中包括了网站策划、平面设计、程序设计等实用的互联网应用技术。内容包括Photoshop CS2设计,FIash 8创作和ActionScript应用程序开发的操作流程。在技术学习的过程中.大家还将体会到顶级互动网站设计、网站建设的设计流程和思路。《闪魂FLASH8网站建设实录》......一起来看看 《闪魂FLASH8网站建设实录》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

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

URL 编码/解码

SHA 加密
SHA 加密

SHA 加密工具