函数式编程圣经

JavaScript编程圣经第五版:从基础到现代应用 本文还有配套的精品资源,点击获取 简介:《JavaScript编程圣经第五版》是一部全面更新的编程指南,深入阐述JavaScript语言的基础知识和最新特性。本书面向所有水平的开发者,提供了从基础语法到高级概念的详细讲解。包括ECMAScript标准、闭包、原型链、函数式编程、ES6新特性、事件处理、DOM操作、异步编程、错误处理、性能优化以及现代JavaScript开发工... 阅读详情

前言:本文原作者BlindingDark, 老刘做了修改。

编程的世界是由许多平行宇宙组成的,面向对象宇宙中的上帝给人类讲述了OO大法,形成了《面向对象圣经》。与此同时,在编号为C-137的平行宇宙中,函数式上帝开始工作了......

1

第一天

上帝看到约翰·麦卡锡发明了表处理语言 Lisp,却只用来学术研究,很是伤心,就把 Lisp 解释器的秘密告诉了他的学生斯蒂芬·罗素,斯蒂芬·罗素将eval函数在IBM 704机器上实现后,函数式编程的大门第一次向人类打开了。


2

第二天

这个平行宇宙的上帝思想独特,他说:“ 要有不变量”                


0?wx_fmt=png


上帝又说: “函数应该是纯粹的(纯函数)”


不能修改传递给函数的变量!


不能修改全局变量!


对于同样的输入参数,返回值总是相同的!

下面的函数是被允许的,每次调用,返回值都相同,可以安全地调用,直到宇宙毁灭。


0?wx_fmt=png

这样的函数在函数式宇宙中是不允许的,因为第二次调用就会导致函数式宇宙的毁灭。


0?wx_fmt=png

这个函数是不被允许的,它竟然想修改输入参数!


0?wx_fmt=png

如果函数返回了一个新的数组,而没有改变原有的值,那函数式上帝很高兴。


0?wx_fmt=png

人类对于上帝立下的规矩表示迷惑不解: are you kiding me ?


3

第三天

人类尝试着写程序,由于不变量的规定,发现连个最基本的for 循环都搞不定。

0?wx_fmt=png


人类迷惑不解:“有没有搞错, 我们怎么写循环?”

上帝说:“你们用循环干什么?”

人类写了一段代码。

0?wx_fmt=png

上帝说:要有递归!  

上帝也写了一段代码:

0?wx_fmt=png

人类说:“这虽然能完成工作,但是好像不太直观啊!再说,亲爱的上帝,如果我那个list容量很大,递归层次很深,会不会出现栈溢出?”

上帝说:“没事,我有尾递归,保证不溢出。这种递归的写法,你们慢慢就习惯了。”

(友情提示:尾递归在《张大胖学递归》中有描述)

4

第四天

上帝发现很多函数大体上都是相同的,只有部分细节不一样,有很多重复代码,太浪费了。

0?wx_fmt=png

上帝说:“要有高阶函数!”

让函数来生成函数,把公用的部分抽取出来,不共用的部分与共用部分能组合起来。

0?wx_fmt=png

上帝提供了几个很好用的高阶函数,如map,filter, fold等,让人类快速高效地去操作集合数据。

0?wx_fmt=png

5

第五天

上帝对自己的工作很满意。仿佛程序世界的框架已经基本完成,只剩下边边角角的实现了。 

可是这个宇宙的人类总是抱怨函数式编程太难,看到这里的上帝不愿意改变,有很多人都穿越到编号为S-87那个所谓“面向对象”的宇宙去了。

上帝叹了口气:“你们呐,目光短浅,摩尔定律已经失效,多核时代已经来临,我们函数式编程天生是为并发编程而生的啊,你看看函数没有side effect,不共享变量,可以安全地调度到任何一个CPU core上去运行,没有烦人的加锁问题,多好啊!”

过了两天,隔壁 S-87 宇宙的面向对象上帝来串门了。

面向对象上帝说:“亲爱的函数式上帝,听叛逃者,不,投诚者,啊,是穿越到我那里的人说,你这个宇宙有个叫做函数式编程的宝贝?”

函数式上帝:“还宝贝?!人都跑光了!”

“你给我讲讲吧,到时候我再劝他们回来。”

函数式上帝于是给他讲了自己创世纪时立下的规矩,还讲了很多他打算在第6天,第7天告诉人类的知识,什么Currying, 惰性求值,宏(macro)等等。

面向对象上帝表示感谢,喜滋滋地回去了。

后来,函数式上帝听说面向对象的宇宙出现了不少混合式风格编程的语言 OOP + FP (Functional Programming),也就没多少人再回到自己的宇宙了。

函数式上帝什么都没说,叹了口气。

6

第六天

函数式上帝决定休息。

7

第七天

函数式上帝继续休息。

这就是为什么函数式世界的程序员能休息两天的来历。


推荐阅读:

面向对象圣经

张大胖学递归

(完)

你看到的只是冰山一角, 更多精彩文章,请移步《2016文章精华》或者《2017文章精华》


码农翻身

用故事讲述技术

0.jpeg

OpenRA引擎实战:如何从零开始搭建一个经典RTS游戏模组(附资源包) 本文详细介绍了如何利用开源游戏引擎OpenRA从零开始搭建经典RTS游戏模组。内容涵盖开发环境配置、资源管线处理、YAML规则定义、地图编辑与Lua脚本编写等全流程实战指南,并提供了资源包,帮助开发者和爱好者快速创建属于自己的即时战略游戏世界。 阅读详情

相关推荐

避坑指南:你的VASP CI-NEB计算为什么不收敛?常见错误分析与解决思路

本文深入解析VASP CI-NEB计算不收敛的常见问题,提供从结构准备到参数设置的系统解决方案。针对过渡态计算中的能量曲线异常、中间图像偏离等典型问题,详细介绍了诊断方法和实用工具,帮助研究者高效解决CI-NEB收敛难题,提升计算效率。

weixin_29698641的博客 432

函数式编程与柯里化:纯粹的编程思想

1.背景介绍 函数式编程是一种编程范式,它强调使用函数来表示计算过程,而不是使用变量和数据结构。这种编程范式的核心思想是将计算看作是对数据的函数式应用,而不是对数据的状态变化。函数式编程语言包括 Lisp、Haskell、Scala 等。 柯里化(currying)是函数式编程中的一种技术,它将一个接受多个参数的函数转换为一个接受一个参数的函数链。这种技术的名字来自于英国数学家和逻辑学家希努里...

AI天才研究院 1087

【TiktokAPI】Tiktok直播API与实时互动功能开发完全指南

Tiktok直播API允许开发者创建、管理直播,并实现各种互动功能。/*** 获取Tiktok直播API访问令牌* @param {string} client_id - 应用ID* @param {string} client_secret - 应用密钥* @param {string} code - 授权码* @param {string} redirect_uri - 重定向URI* @returns {Promise<object>} 访问令牌响应*/try {}),

Mageia的专栏 3195

什么是函数式编程?总结

什么是函数式编程 函数式编程(Functional Programming, FP),FP 是编程范式之一,我们常听说的编程范式还有面向过程编程、面向对象编程。 面向对象编程的思维方式:把现实世界中的事物抽象成程序世界中的类和对象,通过封装、继承和 多态来演示事物事件的联系 函数式编程的思维方式:把现实世界的事物和事物之间的联系抽象到程序世界(对运算过程进行抽 象) 程序的本质:根据输入通过某种运算获得相应的输出,程序开发过程中会涉及很多有输入和 输出的函数 x -> f(联系、映射) ->

weixin_44811288的博客 9602

保姆级教程:手把手教你用Python逆向分析极验4.0滑块验证码的w参数生成逻辑

本文提供了一份详细的Python逆向工程教程,手把手教你分析极验4.0滑块验证码的w参数生成逻辑。通过HTTP请求分析、JavaScript逆向和加密算法复现,帮助开发者深入理解验证码防护机制,并实现高效的自动化解决方案。教程涵盖AST反混淆、轨迹生成算法和AES加密等核心技术,适合中高级开发者提升逆向工程能力。

weixin_30172941的博客 304

python知网爬虫论文pdf下载+立即可用(动态爬虫)

python实现动态爬虫知网论文,搜索+自动翻页+下载 收集数据利器

Braylon的博客 5379

函数式编程

什么是函数式编程?英文的叫法是:Functional programming。函数式编程是一种编程的范式,也可以称作一种编程方式的方法论。常见的编程范式(或者方法论),也有我面向对象编程,英文叫法是 Object-oriented programming 。函数式编程的关注点在函数上,而面向对象编程的关注点在对象上。函数式编程,针对的是一个函数的输入和输出。输入指的是这个函数的参数,而输出是这个函数

程序员老李|前阿里技术专家,10 年前端。 做免费办公工具:图片压缩、PDF、Markdown、在线简历,全在浏览器本地处理。 文件不上传,不用注册。技术栈 Canvas、WebAssembly、Web Worker。 5787

状态机设计与实现( stm32小车避障为例)

本文以STM32小车避障为例,介绍了状态机设计与实现方法。首先阐述了状态机的事件驱动特性、清晰结构和易扩展优势,并给出硬件组成框架。核心实现部分展示了状态枚举定义、状态转移图和主循环框架,通过switch-case结构实现状态切换。关键状态示例包括前方扫描和转向决策逻辑,通过传感器数据驱动状态转移。总结指出状态机设计需定义枚举状态、实现状态函数、使用switch跳转并更新全局状态。文章最后声明内容为学习笔记,欢迎读者指正交流。全文结构清晰,代码示例具体,为嵌入式系统状态机设计提供了实用参考。

2302_80219536的博客 1046

函数式编程的详解(优缺点)

函数式编程是一种"编程范式"(programming paradigm),一种编写程序的方法论 主要的编程范式有三种:命令式编程,声明式编程和函数式编程

常来常往,共同成长 2462

汽车ECU诊断刷写和OTA升级中的验签和校验

汽车ECU诊断刷写和OTA升级中的验签和校验

天赐好车的博客 617

Arcgis中的模型构建器(ModelBuilder)技术之批量图层转KML

这段时间全省各地都在开展耕地流出图斑整改恢复工作,期间或多或少都需要村委会协助摸排举证,除了举证软件外,奥维、外业精灵等软件想必大家接触得也很多。这就经常需要我们转kmz文件给业主或者摸排人员,那么有没有什么方法在arcgis下快速批量转kmz文件呢,今天就介绍一下如何在模型构建器(ModelBuilder)构建批量图层转KML的模型。

weixin_44671081的博客 1325

豆瓣9.6分,Scala编程圣经第5版隆重来袭

要说Scala编程界的圣经,那必须是这本蜚声世界的、由Scala 语言缔造者Martin Odersky编写的—— 《Scala编程》 Programming in Scala 本书全面涵盖了整个编程语言、重要类库及其背后理念,全面且强大,是Scala领域当之无愧的王者之作! 本书上市14年来,紧跟语言版本持续迭代,不断以豆瓣评分8.9、9.2、9.4的成绩刷新着领域的天花板! 其中第三版的中文版更是以9.6高分傲视群雄。 第四版的中文版也收到不少读者的好评! 如今,这部长青经典之作又迎来了一次重大

博文视点(北京)官方博客 3万+

dolphinscheduler服务注册中心源码解析(一)服务注册与发现整体设计

下一篇文章我们开始讲解dolphinscheduler基于Zookeeper实现注册中心的源码解析。

最爱嫣夜来 375

豆瓣9.5分,它是Scala领域当之无愧的王者之作!

今天博文菌要给大家带来一部蜚声世界的Scala编程圣经,它就是由Scala 语言缔造者Martin Odersky编写的—— 《Scala编程》 Programming in Scala 本书全面涵盖了整个编程语言、重要类库及其背后理念,全面且强大,是Scala领域当之无愧的王者之作! 上市12年来,本书紧跟语言版本持续迭代,不断以豆瓣评分8.9、9.2、9.4的成绩刷新着领域的天花板! 其中第三版的中文版更是以9.5高分傲视群雄。 今天,博文菌要宣布,时...

博文视点(北京)官方博客 550

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Scala 函数式编程(一) 什么是函数式编程?

为什么我们需要学习函数式编程?或者说函数式编程有什么优势?这个系列中我会用 scala 给你讲述函数式编程中的优势,以及一些函数式的哲学。对了,不懂 scala 也没关系...

zzzzMing -大数据/数据分析/数据挖掘 315

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

java函数式编程_Scala 函数式编程(一) 什么是函数式编程?

为什么我们需要学习函数式编程?或者说函数式编程有什么优势?这个系列中我会用 scala 给你讲述函数式编程中的优势,以及一些函数式的哲学。不懂 scala 也没关系,scala 和 java 是类似的,在每篇的开头我也会先说明这节中用到的 scala 语法。为什么函数式编程这几年火起来如 Python 一样,函数式编程(FP,即Functional Programming)也是近几年才逐渐为人们所...

weixin_39627361的博客 119

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Scala函数式编程指南(一) 函数式思想介绍

为什么我们需要学习函数式编程?或者说函数式编程有什么优势?这个系列中我会用 scala 给你讲述函数式编程中的优势,以及一些函数式的哲学。不懂 scala 也没关系,scala 和 java 是类似的,在每篇的开头我也会先说明这节中用到的 scala 语法。 为什么函数式编程这几年火起来 如 Python 一样,函数式编程(FP,即Functional Programming)也是近几...

weixin_30552635的博客 217

技术分享:什么是函数式编程?

  为什么我们需要学习函数式编程?或者说函数式编程有什么优势?这个系列中我会用 scala 给你讲述函数式编程中的优势,以及一些函数式的哲学。不懂 scala 也没关系,scala 和 java 是类似的,在每篇的开头我也会先说明这节中用到的 scala 语法。   为什么函数式编程这几年火起来   如 Python 一样,函数式编程(FP,即Functional Programming)也是...

qianfeng_dashuju的博客 342

Java函数式编程

1. 课程介绍 1.1 课程介绍和环境配置 课程介绍 开发环境和数据对象的介绍 函数式编程介绍 函数式编程的特点 流的常见操作符和应用场景 什么是流 基础操作符 Optional流 收集器之集合对象 分组统计和聚合函数 收集阶段的操作符 排序 高阶操作符 flatMap reduce 1.2 函数式编程介绍 ​ 函数式编程是一种是一种编程范式,它将计算视为函数的运算,并避免变化状态和可变数据。它是一种声明式编程范式,也就是说,编程是用表达式或声明而不是语句来完成的。 ​ L

weixin_42606296的博客 473

编程界的圣经:从Scheme到JavaScript构建你的计算思维

与众不同地,一方面,SICP注目于帮助读者理解基于计算的观点看世界、看问题的重要性,掌握相关的基本概念和观点,建立基于计算思考问题的习惯,也就是今天人们常说的计算思维。本书的内容是原SICP的翻版,作者编写本书的基本目标是尽可能完整准确地反映原书的宗旨和精神,同时又使这些能被更多的人理解和重视。由于本书的根源和作者的意图,本书的基本内容和结构都来自SICP,许多一般性的讨论直接来自原书,但也有许多地方针对JavaScript做了一些调整和修改。第4章讨论元语言抽象,也就是设计和实现面向应用的新语言的问题;

程序边界 5567

跟我学代码架构设计模式之--初识函数式编程

一直一来,总把面向对象编程思想奉为圣经,直到今天在网上接触了函数式编程思想,乍看烧脑,格格不入的感觉,后经大脑高负荷运转了大半天来思考,终于有些头绪:函数式编程是和传统面向对象编程是解决问题的两种不同计算思路,用函数式编程思想对并发和分布式计算应该会很有用武之地。下面说一说我对函数式编程思想的初步理解。 先从传统面向对象思想说起: 面向对象思想解决问题的思路很直观,其实就是传统C语言中提出的"...

孔令宽的专栏 369

闭包,函数式编程学习小记

对象是包含行为的数据,闭包是包含数据的行为。 闭包就是能够读取其他函数内部变量的函数,也可以让内部的局部变量通过闭包暴露给外部函数,所以本质上闭包就是将函数内部和函数外部连接起来的一座桥梁。 function f1(){ var n=999; nAdd=function(){n+=1} function f2(){ alert(n); } re...

weixin_30530523的博客 115

7本计算机圣经

1、《计算机程序设计艺术(第1卷)》 《计算机程序设计艺术》系列是公认的计算机科学领域经典之作,深入阐述了程序设计理论,对计算机领域的发展有着极为深远的影响。一共有3卷,第 1 卷,讲解基本算法;第2卷,全面讲解了半数值算法,分“随机数”和“算术”两章;第3卷,全面讲述了排序和查找算法。 豆瓣书评: @Palmer:这也算是需要 一辈子用心来读 的一本书吧!~@P...

wzq2009的专栏 7824
上一篇: 算法分析神器—时间复杂度
下一篇: 如何维护一个好的技术博客?
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值