本书以Java虚拟机为背景,详细探讨了函数式编程在Clojure和Scala中的应用。它向读者展示了如何使用函数式方案来替代或简化面向对象编程中常用的通用模式。通过介绍在函数式世界中广泛使用的模式,本书为读者提供了宝贵的学习资源和实践指南。对于想要利用Java虚拟机进行高效编程的开发者来说,这本书无疑是必备的工具和参考书籍。无论是想深入了解函数式编程还是扩展自己的技术栈,本书都能帮助读者事半功倍。
Scala与Clojure函数式编程模式:Java虚拟机高效编程封面
读者评价
发现clojure要比scala简洁,拖着一个静态类型系统就是麻烦。有好多限制,感觉静态类型的代价太大了。
看过一遍第四章,大多例子很简单,也有启发性。第三章需要先熟练设计模式,因为书中很少解释模式的原型和使用场景。
还不错,讲得比较浅,算是扫盲。从oo的角度出发还是值得一看,一天就扫完了。最大的收获就是闭包与函数生成器
看这本书之前需要对面向对象的设计模式有所了解,书主要是为面向对象的人了解函数式用的。但如何转变思维,作者并没有写太深。不过作者在字里行间也穿插着提供了一些个人的经验。
对于学过scala 的人来说,此书就略显冗余。不过结合各个编程模式,让新手熟悉scala 和 clojure 还不错。clojure 也有其独特之处,还是值得学习。
内容介绍
StackOverflow刚刚发布了2015开发者调查,最受程序员喜爱的开发语言中,Clojure和Scala分别位列第五和第六。排名第一的是Swift,而Swift相比原先的Objective-C最重要的优点之一,就是对函数式编程提供了更好的支持。同时,新一代分布式计算系统Spark不仅在实现中选择了Scala,其提供的首选编程语言也是Scala。
所有迹象都显示,诞生50多年后,函数式编程却焕发了青春,越来越受到关注和青睐,从边缘地带步入了主流,除了Scala和Clojure这些新生函数式编程语言大行其道之外,Java等老牌面向对象的编程语言也开始支持匿名函数。函数式编程能简化开发过程,尤其是大型知识管理系统应用程序从中受益良多。
本书向读者展示了如何采用函数式方案来替代或简化面向对象编程中使用的诸多通用模式,同时还介绍了一些在函数式世界中广泛使用的模式。如果你是一名Java程序员,希望了解函数式编程能为你的工作效率带来多大的提升,或者你是一名刚刚开始使用Scala和Clojure的新手,尚不能玩转函数式的问题解决方案,那么本书就是为你而准备的。
目录
- 第1章 模式和函数式编程 1
- 第2章 TinyWeb:让模式协同工作 7
- 第3章 替代面向对象模式 35
- 简介 35
- 模式1 替代函数式接口 35
- 模式2 替代承载状态的函数式接口 42
- 模式3 替代命令模式 48
- 模式4 替代生成器模式来获得不可变对象 55
- 模式5 替代迭代器模式 64
- 模式6 替代模板方法模式 73
- 模式7 替代策略模式 81
- 模式8 替代空对象 87
- 模式9 替代装饰器模式 95
- 模式10 替代访问者模式 99
- 模式11 替代依赖注入 113
- 第4章 函数式模式 121
- 简介 121
- 模式12 尾递归模式 121
- 模式13 相互递归模式 128
- 模式14 Filter-Map-Reduce模式 136
- 模式15 操作链模式 139
- 模式16 函数生成器模式 146
- 模式17 记忆模式 159
- 模式18 惰性序列模式 163
- 模式19 集中的可变性 172
- 模式20 自定义控制流 180
- 模式21 领域特定语言 191
- 第5章 结束语 201
- 参考文献 202
还不错,讲得比较浅,算是扫盲。从oo的角度出发还是值得一看,一天就扫完了。最大的收获就是闭包与函数生成器
都试图利用成熟的 JVM,并可以使用 JVM 平台上现存的代码和广泛的库,同时避免 Java 语言表达上的一些弱点。 两者都试图将函数编程 (FP) 引入到原本是为纯 OO 语言 Java 定制的 JVM 上。因此,它们都具有 FP 的特征:函数是头等公民,可以作为参数传递,可以作为返回值返回。 但两种语言的设计哲学截然不同: Clojure 是历史悠久的 Lisp 的一种方言,它需要尊重 Lisp 的传统:包括臭名昭著(对 Lisp 爱好者是香味扑鼻)的括号海洋。当然 Clojure 做了很多不同传统 Lisp 的处理,如引入了 Vector,map 等基本类型,而不只是 List。而 Scala 是全新设计的语法,它不受过往语法的限制;它深受 Haskell 的影响,有抽象数据类型 ADT、 模式匹配等鲜明特征。 Scala 是强类型语言,编译器积极检查数据类型,有类型推断等新类型语言的先进特征。Clojure 是鸭子类型语言,编译器不检查类型,这责任在于程序员自己(目前 core.typed 库试图把强类型检查作为可选项加入到 Clojure 语言中,不过还远远不到成熟的地步)。 Scala 认为 OO 和 FP 都是非常有效的表达方法,因此在语言中同时支持它们。Clojure 则强烈不鼓励使用 OO 编程,尽管从与 Java 互通等方面出发有一些支持。它强烈倾向于 FP 编程。带来的后果是 Scala 的程序风格可能会非常多样,而 Clojure 则相对统一。 Scala 是传统的语言开发方式:有相当多的关键字和语法糖,都需要核心开发者支持。虽然加入了元编程能力,但其元编程与普通编程区别很大,难以被一般开发者使用。 Clojure 从 Lisp 处继承的代码即数据的核心,则保证了极为自然和强大的元编程能力,任何开发者都很容易用宏来定义自己的语法,因此基于 Clojure 定义自己的领域语言(DSL)非常容易。
Scala 认为 OO 和 FP 都是非常有效的表达方法,因此在语言中同时支持它们。Clojure 则强烈不鼓励使用 OO 编程,尽管从与 Java 互通等方面出发有一些支持。它强烈倾向于 FP 编程。带来的后果是 Scala 的程序风格可能会非常多样,而 Clojure 则相对统一。