《javascript函数式编程思想》

starrow      2022-06-09     315

关键词:

自序

伴随着Web技术的普及,JavaScript已成为应用最广泛的编程语言之一。由于其在Web前端编程中的统治地位、语言本身的表现力、灵活性、开源的本质和ECMAScript标准近年来的快速发展,JavaScript向各个领域渗透的势头仍然强劲。函数式编程的思想和语言原来仅仅在计算机学术圈中流行,近年来它的魅力越来越多地被主流软件开发行业认识到,Scala、Closure等语言的出现,C#、Java等语言中引入函数式编程的功能都是这一趋势的体现。

传统的JavaScript开发主要使用命令式和面向对象的编程范式,并零星地结合了一些函数式编程的技巧。通过系统地介绍函数式编程的思想和技术,展现它在提高代码的表现力、可读性和可维护性等方面的益处,本书希望能让更多的JavaScript程序员了解并喜欢上这种优美而高效的编程范式。

全书共分9章。第1、2章介绍了与JavaScript函数式编程所用技术紧密关联的名称和类型系统的理论;第3章简要介绍了函数式编程的理论基础lambda演算和JavaScript中函数的相关知识;第4、5章介绍了函数式编程的基础和核心技术:一等值的函数、部分应用和复合;第6章介绍了函数式编程的典型特征:没有副作用的纯函数和不可变的数据;第7章介绍了函数式编程中进行重复计算的递归模式;第8章介绍了函数式编程的重要领域:列表处理;第9章系统地比较了面向对象编程和函数式编程。

野人献曝,未免贻笑大方;愚者千虑,或有一得可鉴。书中的不足之处,欢迎读者批评指正。

目录

内容提要
前言
第1章  名称
1.1  名称绑定
1.1.1  常量和变量
1.2  作用域
1.2.1  包块作用域与就近声明
1.2.2  静态作用域和动态作用域
1.2.3  前向引用和提升
1.3  闭包
1.3.1  包块作用域与闭包
1.4  小结
第2章  类型系统
2.1  类型是什么
2.2  常用的数据类型
2.2.1  整数
2.2.2  浮点数
2.2.3  布尔值
2.2.4  字符
2.2.5  元组、结构体、类
2.2.6  函数
2.2.7  数组、字符串、队列、堆栈、列表
2.2.8  结构体、映射
2.2.9  深入复合类型
2.3  强类型与弱类型
2.4  名义类型和结构类型
2.5  静态类型与动态类型
2.5.1  静态类型
2.5.2  动态类型
2.6  多态性
2.6.1  子类型多态性
2.6.2  参数多态性
2.7  JavaScript的类型系统
2.7.1  undefined和null
2.7.2  弱类型
2.7.3  变成强类型
2.8  鸭子类型和多态性
2.9  小结
第3章  Lambda演算和函数
3.1  命令式编程中函数的作用
3.1.1  抽象级别
3.2  Lambda演算
3.2.1  定义
3.2.2  记法
3.2.3  化约
3.2.4  算数
3.2.5  逻辑运算
3.2.6  函数式编程的特点
3.3  JavaScript中的函数
3.3.1  定义函数
3.3.2  调用函数
3.3.3  传递参数
3.3.4  模块
3.5  小结
第4章  函数是一等值
4.1  函数参数
4.1.1  数组的迭代方法
4.1.2  设计函数参数
4.2  函数返回值
4.2.1  判断数据类型
4.2.2  日志
4.2.3  读取对象属性
4.3  高阶函数
4.3.1  组合谓词函数
4.3.2  改变函数参数数目
4.3.3  检查参数类型
4.3.4  记忆化
4.4  小结
第5章  部分应用和复合
5.1  部分应用
5.2  柯里化
5.2.1  增强的柯里化
5.2.2  从右向左柯里化
5.2.3  进一步增强的柯里化
5.2.4  柯里化的性能成本
5.2.5  应用柯里化的方式
5.2.6  参数的顺序
5.2.7  柯里化与高阶函数
5.3  复合
5.3.1  管道和数据流
5.3.2  函数类型与柯里化
5.4  一切都是函数
5.4.1  操作符的函数化
5.4.2  方法的函数化
5.4.3  控制流语句的函数化
5.5  性能和可读性
5.6  小结
第6章  副作用和不变性
6.1  副作用
6.2  纯函数
6.2.1  外部变量
6.2.2  实现
6.2.3  函数内部的副作用
6.2.4  闭包
6.3  不变性
6.3.1  哲学上的不变性与身份
6.3.2  简单类型和复合类型
6.3.3  值类型和引用类型
6.3.4  可变类型和不可变类型
6.3.5  可变数据类型的坏处
6.3.6  克隆和冻结
6.3.7  不可变的数据结构
6.3.8  不可变的映射和数组
6.3.9  不可变类型的其他好处
6.4  小结
第7章  递归
7.1  调用自身
7.1.1  递归的思路
7.1.2  带累积参数的递归函数
7.2  递归的数据结构
7.2.1  构建列表
7.2.2  树
7.3  递归与迭代
7.3.1  名称
7.3.2  理念和对比
7.3.3  迭代协议
7.3.4  递归协议
7.3.5  搜索树
7.4  尾部递归
7.4.1  调用堆栈
7.4.2  尾部调用优化
7.4.3  怎样算是尾部调用
7.4.4  尾部递归
7.5  递归的效率
7.6  小结
第8章  列表
8.1  处理列表
8.1.1  函数的三种写法
8.1.2  处理列表的高阶函数
8.2  函数式编程的列表接口
8.2.1  没有副作用的方法
8.2.2  有副作用的方法
8.2.3  列表接口中的其他函数
8.3  小结
第9章  从面向对象到函数式编程
9.1  面向对象编程的特点
9.1.1  封装性
9.1.2  继承性
9.1.3  多态性
9.2  JavaScript面向对象编程
9.2.1  创建和修改单个对象
9.2.2  克隆和复制属性
9.2.3  原型
9.2.4  建构函数
9.2.5  建构函数和类型继承
9.2.6  原型和类型继承
9.2.7  Proxy和对象继承
9.2.8  Mixin
9.2.9  工厂函数
9.3  函数式编程的视角
9.3.1  不可变的对象
9.3.2  评判面向对象编程
9.4  方法链和复合函数
9.4.1  方法链
9.4.2  延迟的方法链
9.4.3  复合函数
9.4.3  函数式的SQL
9.5  小结

更多内容

《JavaScript函数式编程思想》(京东)

《JavaScript函数式编程思想》(当当)

 欢迎各位朋友本人及男朋友女朋友老公老婆儿子女儿中对JavaScript和函数式编程感兴趣的阅读。每次购买50斤以上(含)者赠作者签名照一张:)

《javascript函数式编程思想》——列表

第8章 列表函数式编程与列表处理有很深的渊源。列表是最基础,也是使用最普遍的复合数据类型。作为最早出现的函数式编程语言之一,Lisp【注:它的名称就来源于“列表处理器”(LIStProcessor)】用函数参... 查看详情

《javascript函数式编程思想》

自序伴随着Web技术的普及,JavaScript已成为应用最广泛的编程语言之一。由于其在Web前端编程中的统治地位、语言本身的表现力、灵活性、开源的本质和ECMAScript标准近年来的快速发展,JavaScript向各个领域渗透的势头仍然... 查看详情

《javascript函数式编程思想》——部分应用和复合

第5章 部分应用和复合一等值的函数,是函数式编程的基石。部分应用和复合,则是函数式编程的重要特征。采用命令式编程时,每当我们感觉需要抽象出一个新的功能时,就会定义一个函数。在函数式编程中... 查看详情

《javascript函数式编程思想》——函数是一等值

第4章 函数是一等值在函数式编程的标准或特点中,“函数是一等值”是最基本和重要的,也是最为人所知的,所有介绍函数式编程的书籍和文章都会优先介绍这一点,以至于“一等值”几乎成为函数的专属头衔&... 查看详情

《javascript函数式编程思想》——名称

第1章 名称一般对函数式编程的介绍都会从一等值和纯函数等概念开始,本书却准备在那之前先花些篇章讨论两个通常未得到足够重视的主题:名称和类型系统。前者包括名称绑定、作用域和闭包等内容,后者包括类... 查看详情

《javascript函数式编程思想》——类型系统

第2章 类型系统为什么在许多编程语言中整数和浮点数是两种类型?结构体、数组、列表、映射……这些类型有什么关系?用户自定义的各种类型与它们又有什么关系?函数也是类型吗?强类型和弱类型意味着什... 查看详情

《javascript函数式编程思想》——递归

第7章 递归王二、张三和赵四一日无聊,决定玩击鼓传花讲冷笑话的游戏。王二和张三围成一圈传花,赵四负责击鼓。张三接连讲了几个诸如小菜、狐狸狡猾的笑话。花停在了王二的手中。王二:这个笑话很短。你要... 查看详情

《javascript函数式编程思想》——副作用和不变性

第6章 副作用和不变性6.1 副作用6.2 纯函数6.2.1 外部变量6.2.2 实现6.2.3 函数内部的副作用6.2.4 闭包6.3 不变性6.3.1 哲学上的不变性与身份6.3.2 简单类型和复合类型6.3.3 值类型和引用类型6.3.4 可变类型和不可变类型6.3.5 可变... 查看详情

玩转javascript面试:何为函数式编程?(代码片段)

函数式编程在JavaScript领域着实已经成为一个热门话题。就在几年前,很多JavaScript程序员甚至都不知道啥是函数式编程,但是就在近三年里我看到过的每一个大型应用的代码库中都包含了函数式编程思想的大规模使用。函数式编... 查看详情

函数式编程思想

对于函数式编程来说,其只关心,定义输入数据和输出数据相关的关系,数学表达式里面其实是在做一种映射(mapping),输入的数据和输出的数据关系是什么样的,是用函数来定义的。http://www.yxtvg.com/toutiao/5413179/20180212a04ro500.ht... 查看详情

函数响应式编程(frp)思想

...让你的代码像数学一样简洁,业务像流水一样清晰流畅。函数响应式编程响应式编程思想为体,函数式编程思想为用。响应式编程例如,在命令式编程环境中,a:=b+c表示将表达式的结果赋给a,而之后改变b或c的值不会影响a。但... 查看详情

kotlin函数式编程思想fpinkotlin

Kotlin函数式编程思想:FPinKotlin函数式编程特性闭包和高阶函数函数编程支持函数作为第一类对象,有时称为闭包或者仿函数(functor)对象。实质上,闭包是起函数的作用并可以像对象一样操作的对象。与此类似,FP语言... 查看详情

javascriptes6函数式编程:柯里化偏应用组合管道(代码片段)

上一篇介绍了闭包和高阶函数,这是函数式编程的基础核心。这一篇来看看高阶函数的实战场景。首先强调两点:注意闭包的生成位置,清楚作用域链,知道闭包生成后缓存了哪些变量高阶函数思想:以变量作用域作为根基,以... 查看详情

javascript函数式编程

第1章JavaScript函数式编程简介11.1JavaScript案例11.2开始函数式编程41.2.1为什么函数式编程很重要41.2.2以函数为抽象单元71.2.3封装和隐藏91.2.4以函数为行为单位101.2.5数据抽象141.2.6函数式JavaScript初试171.2.7加速191.3Underscore示例221.4总结2... 查看详情

js函数式编程思想(v客学院知识分享)

...现在已经更新到ES7,不久ES8规范即将面世,为了是JS语法对函数编程更加友好,诸如RxJS(ReactiveX)等函数式框架的不断流行。函数式编程则应该是以函数做为舰载主体,然后对函数进行拆分封装、更加抽象,可扩展性极强。 与传... 查看详情

函数式编程思想:耦合和组合,第2部分

...者可能会对这一方法的缺点及其他的可选做法视而不见,函数式编程使用不同的构建块来实现重用,其基于的是更一般化的概念,比如说列表转换和可移植代码。函数式编程思想的这一部分内容比较了作为重用机制的经由继承的... 查看详情

函数式编程思想:以函数的方式思考,第3部分

...ealFord发布:2011-07-0611:23:24挑错|查看译者版本|收藏本文在函数式编程思想的第一部分和第二部分中,我考察了一些函数式编程的主题,研究了这些主题如何与Java?及其相关语言产生关联。本篇文章继续这一探索过程,给出来自前... 查看详情

函数响应式编程(frp)思想-callback风格

...让你的代码像数学一样简洁,业务像流水一样清晰流畅。函数响应式编程响应式编程思想为体,函数式编程思想为用。 响应式编程例如,在命令式编程环境中,a:=b+c表示将表达式的结果赋给a,而之后改变b或c的值不会影响a... 查看详情