本书脱离特定的语言特性,关注各种OOP语言的共同实践做法,展示如何通过函数式语言解决问题。例如,如何利用函数式语言,通过高阶函数、多元方法等完成代码重用。知名软件架构师Neal Ford为我们展示不同的编程范式,帮我们完成从Java命令式编程人员,到使用Java、Clojure、Scala函数式编程人员的完美转变,建立对函数式语言的语法和语义的良好理解。
译者序ix
前言xi
第1章 为什么1
1.1 范式转变2
1.2 跟上语言发展的潮流4
1.3 把控制权让渡给语言/ 运行时4
1.4 简洁5
第2章 转变思维9
2.1 普通的例子9
2.1.1 命令式解法9
2.1.2 函数式解法10
2.2 案例研究:完美数的分类问题15
2.2.1 完美数分类的命令式解法15
2.2.2 稍微向函数式靠拢的完美数分类解法16
2.2.3 完美数分类的Java 8实现18
2.2.4 完美数分类的Functional Java实现19
2.3 具有普遍意义的基本构造单元21
2.3.1 筛选22
2.3.2 映射23
2.3.3 折叠/ 化约25
2.4 函数的同义异名问题28
2.4.1 筛选28
2.4.2 映射31
2.4.3 折叠/ 化约33
第3章 权责让渡37
3.1 迭代让位于高阶函数37
3.2 闭包38
3.3 柯里化和函数的部分施用41
3.3.1 定义与辨析41
3.3.2 Groovy的情况42
3.3.3 Clojure的情况44
3.3.4 Scala的情况44
3.3.5 一般用途47
3.4 递归48
3.5 Stream 和作业顺序重排53
第4章 用巧不用蛮55
4.1 记忆55
4.1.1 缓存56
4.1.2 引入“记忆”59
4.2 缓求值65
4.2.1 Java语言下的缓求值迭代子65
4.2.2 使用Totally Lazy框架的完美数分类实现67
4.2.3 Groovy语言的缓求值列表69
4.2.4 构造缓求值列表72
4.2.5 缓求值的好处74
4.2.6 缓求值的字段初始化76
第5章 演化的语言79
5.1 少量的数据结构搭配大量的操作79
5.2 让语言去迎合问题81
5.3 对分发机制的再思考82
5.3.1 Groovy对分发机制的改进82
5.3.2 “身段柔软”的Clojure 语言83
5.3.3 Clojure的多重方法和基于任意特征的多态85
5.4 运算符重载87
5.4.1 Groovy87
5.4.2 Scala89
5.5 函数式的数据结构91
5.5.1 函数式的错误处理91
5.5.2 Either类92
5.5.3 Option类100
5.5.4 Either树和模式匹配100
第6章 模式与重用107
6.1 函数式语言中的设计模式107
6.2 函数级别的重用108
6.2.1 Template Method模式109
6.2.2 Strategy模式 111
6.2.3 Flyweight模式和记忆113
6.2.4 Factory模式和柯里化116
6.3 结构化重用和函数式重用的对比117
第7章 现实应用125
7.1 Java 8125
7.1.1 函数式接口126
7.1.2 Optional类型128
7.1.3 Java 8的stream128
7.2 函数式的基础设施129
7.2.1 架构129
7.2.2 Web 框架132
7.2.3 数据库133
第8章 多语言与多范式135
8.1 函数式与元编程的结合136
8.2 利用元编程在数据类型之间建立映射137
8.3 多范式语言的后顾之忧140
8.4 上下文型抽象与复合型抽象的对比141
8.5 函数式金字塔143
作者简介147
封面介绍147
本书用丰富的图示,从最小二乘法出发,对基于最小二乘法实现的各种机器学习算法进行了详细的介绍。第Ⅰ部分介绍了机器学习领域的
《打造人民币离岸产品中心》内容简介:香港交易所权威作品,系统梳理互联互通、人民币产品新进展! 香港交易所集团行政总裁李小加专
《ASP.NET MVC 企业级实战》内容简介:ASP.NET MVC 是微软官方提供的以MVC模式为基础的ASP.NET Web应用程序框架。MVC 将一个W...
《迟到民族与激进思想》内容简介:在《迟到民族与激进思想》中,作者以《德国思想的他者视角》开篇,从著名学者卡尔·曼海姆、马丁
《青年管理者》内容简介:企业如何制定发展战略?如何在数字化时代推进战略创新?如何实行组织结构变革和平稳转型?如何系统化推进
《财务管理》内容简介:本书旨在帮助广大读者进行2015年会计专业技术资格考试的复习备考,其主要功能在于帮助读者准确把握考试重点
Linux 本书特色 《完全傻瓜·Linux(第2版)》:简便方法:让你*大限度地掌握Linux简易步骤:教你安装、配置Linux,使用K桌面环境,将您的计算机...
瓦片颗粒和板型颗粒有什么区别?搭建墙壁时用堆叠法为什么不好?你怎样搭建乐高马赛克,怎样用不同的比例搭建?所有问题你都可以
VisualFoxPro课程设计案例精编 本书特色 以案例带动知识点,诠释实际项目的设计理念,使读者可举一反三。案例典型、切合实际应用,使读者身临其境,有助于快...
《别输在不懂营销上》内容简介:本书按照推销的进程来安排顺序,从塑造推销员的基本素质说开去,将接近客户、寻找和开发客户、产品介
作为一位平面设计师,为什么一定要依赖那些已有的字体、用别人的图形——如果你能够创造自己的标志、字体和书写的话。莱斯利·凯
《坚持把立德树人作为根本任务》内容简介:该书全面梳理了党的十八大以来习近平总书记关于立德树人的重要论述,深刻阐释了立德树人
《理智与情感》内容简介:人文社本版“奥斯丁文集”首次亮相 简·奥斯丁处女作,与《傲慢与偏见》堪称姐妹篇 简·奥斯丁在十九岁时
《我的小阳台四季有花》内容简介:◆一本针对新手的园艺书,当你对植物无从下手时,不妨翻开看看大家怎么种植。◆书中拜访13位国内
本书的目的是想让人们考虑设计虚拟世界的问题。问题不在于你是否赞同其中的观点,而在于——除非你能够提出自己的观点。从虚拟世
大多数的设计师在职业发展上都得先靠自吹自擂作保证,先接下各种自己不熟悉的设计案,再硬着头皮摸索出一条路。本书提供的80个创
在过去单核CPU时代,单任务在一个时间点只能执行单一程序,随着多核CPU的发展,并行程序开发就显得尤为重要。《实战Java高并发程
本书结合理论知识和实例程序,全面而系统地介绍了Objective-C编程的相关内容,包括类和继承、对象的类型和动态绑定、基于引用计数
《江苏历代文化名人传·丁文江》内容简介:本书主要从“科学”与“近代化”两方面展现了地质学家、社会活动家丁文江波澜壮阔的一生
《饭前一碗汤,胜过良药方》内容简介:“汤水就像阳光和雨露,默默滋养着我们,改善着我们的生命和生活的状态。”懂喝汤的医学博士