具体描述
StackOverflow刚刚发布了2015开发者调查,最受程序员喜爱的开发语言中,Clojure和Scala分别位列第五和第六。排名第一的是Swift,而Swift相比原先的Objective-C最重要的优点之一,就是对函数式编程提供了更好的支持。同时,新一代分布式计算系统Spark不仅在实现中选择了Scala,其提供的首选编程语言也是Scala。
所有迹象都显示,诞生50多年后,函数式编程却焕发了青春,越来越受到关注和青睐,从边缘地带步入了主流,除了Scala和Clojure这些新生函数式编程语言大行其道之外,Java等老牌面向对象的编程语言也开始支持匿名函数。函数式编程能简化开发过程,尤其是大型知识管理系统应用程序从中受益良多。
本书向读者展示了如何采用函数式方案来替代或简化面向对象编程中使用的诸多通用模式,同时还介绍了一些在函数式世界中广泛使用的模式。如果你是一名Java程序员,希望了解函数式编程能为你的工作效率带来多大的提升,或者你是一名刚刚开始使用Scala和Clojure的新手,尚不能玩转函数式的问题解决方案,那么本书就是为你而准备的。
作者简介
作者简介:
Michael Bevilacqua-Linn
康卡斯特杰出工程师,现为该公司的新一代服务的电力基础设施构建分布式系统。他五年级的时候就拖着一台Apple II GS到自己班为同学们解释循环和变量。其博客地址为http://mblinn.com/。
译者简介:
赵震一
一线攻城狮,曾涌入创业洪流,多年未有所成。现居杭州,就职于阿里巴巴。热爱技术,关注互联网与大数据。InfoQ社区编辑,闲暇译一些技术文章,译有《RESTful Web APIs中文版》。
目录信息
1.1 什么是函数式编程 2
1.2 模式词汇表 4
第2章 TinyWeb:让模式协同工作 7
2.1 TinyWeb简介 7
2.2 采用Java来编写TinyWeb 7
2.3 采用Scala来编写TinyWeb 17
2.4 采用Clojure来编写TinyWeb 25
第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
· · · · · · (收起)
读后感
用户评价
当我开始啃这本书时,最大的感受是作者对Clojure那份近乎虔诚的热爱与洞察力。这本书对于Clojure的Lisp哲学,特别是宏(Macro)的强大能力,进行了极为透彻的阐述。很多书籍在介绍Clojure时往往浅尝辄止于其核心数据结构,但此书却敢于深入到元编程的层面,揭示了Clojure如何在编译时进行代码转换,从而实现高度的表达力和抽象能力。作者通过对特定领域语言(DSL)构建的详细步骤解析,让我真切体会到,在Clojure的世界里,代码不再是僵硬的指令集,而是可以被数据结构灵活操作的对象。虽然早期阅读Clojure的S表达式结构需要一个适应过程,但书中对“代码即数据”这一核心理念的阐释,有效地帮助我跨越了初期的认知障碍。对于那些渴望掌握Lisp系语言精髓,并希望构建高度可重用、自文档化系统的工程师来说,这本书提供了不可替代的深度指南。
这本书最让我感到惊喜的是,它并未局限于介绍语言本身的功能,而是将重心放在了“模式”的构建上。作者花费了大量的篇幅,深入剖析了如何将函数式编程的理念应用到大型、有状态的业务系统中去。例如,书中关于领域建模的章节,清晰地展示了如何使用不可变数据结构来精确地表示业务状态的变化历史,从而构建出具有完美可追溯性的审计日志系统。书中对于“去副作用化”的实践建议,极其具有操作性,我甚至开始尝试将之前系统中那些充斥着隐式状态修改的代码块,重构为纯函数链条。这种由内而外的思维转变是渐进的,而这本书恰好提供了这种转变所需的坚实理论基础和丰富的实战经验。它不仅是工具书,更是一本关于如何系统地思考软件复杂性的哲学指南,强烈推荐给所有寻求技术深度突破的同行们。
这本书的章节安排非常有层次感,它似乎是故意将Scala和Clojure这两个风格迥异但理念相通的语言放在一起进行对比和融合。读到关于并发和并行处理的那几个章节时,这种对比的优势尤为明显。在介绍Scala中如何利用Future和Actor模型处理并行任务时,讲解细致入微,几乎可以作为一本独立的并发编程教材。紧接着,转到Clojure部分,作者展示了如何利用STM(软件事务内存)和Agent来管理共享状态,那份优雅和对死锁问题的规避,对比起传统锁机制,简直是天壤之别。这种并置不仅展示了不同语言在解决同一类问题时的不同哲学取向,更重要的是,它促使读者去思考,在特定的业务需求下,哪种抽象层次和工具集更为合适。全书行文流畅,即便涉及复杂的类型系统或数据流管道,作者也能用极其形象的比喻来辅助理解,阅读体验远超预期。
这本厚厚的书摆在桌上,光是翻开目录就能感受到作者对函数式编程理解的深度与广度。初读之下,便被其中对Scala语言特性的精妙运用所吸引。它不仅仅是简单地罗列语法规则,而是深入探讨了如何利用Scala的强类型系统和隐式参数等特性,来构建出既优雅又健壮的程序结构。书中的示例代码非常贴合实际应用场景,比如在处理并发数据流时,作者展示了如何运用Monad来管理副作用,使复杂的异步逻辑变得清晰可控。我特别欣赏作者在讲解惰性求值和集合操作时的那种娓娓道来,不是生硬地灌输概念,而是通过一系列精心设计的练习,引导读者去“感受”函数式思维的精髓。对于一个已经对面向对象编程有些年头的开发者来说,这本书就像是打开了一扇通往全新编程范式的窗户,让我开始重新审视自己过去写代码的方式,尤其是在状态管理和副作用隔离方面,获得了许多启发性的见解。这绝对是一本需要细细品味,并时常回顾的案头必备参考书,其价值远超一般教程的范畴。
我必须承认,这本书的难度系数不低,它不是一本为初学者准备的“快速入门”指南,而更像是一份面向资深开发者的“内功心法”。尤其是在探讨函数式设计模式的部分,书中对于“函子(Functor)”、“应用函子(Applicative)”和“Monad”的讲解,其严谨性和精确性,达到了学术论文的水准,但幸运的是,作者总能在理论推导后,立刻跟进一个非常实用的代码案例来“落地”。这种严谨与实用的完美结合,确保了读者在吸收了高深理论的同时,不会迷失在纯粹的抽象之中。我个人花了大量时间反复研读关于“类型类”如何在Scala中模拟实现的部分,这极大地提升了我对类型系统设计的理解。这本书的价值在于,它教的不是如何写出能运行的代码,而是如何写出‘正确’、‘可维护’、‘易于推理’的代码,这是区分普通程序员和架构师的关键所在。
其实函数式和面向对象是2种思维方式, 以设计模式在函数式里面怎么是怎么做的为切入点,一般吧
从面向对象模式到函数式编程模式,需要对面向对象的设计模式有一定了解
其实函数式和面向对象是2种思维方式, 以设计模式在函数式里面怎么是怎么做的为切入点,一般吧
其实函数式和面向对象是2种思维方式, 以设计模式在函数式里面怎么是怎么做的为切入点,一般吧
还不错,讲得比较浅,算是扫盲。从oo的角度出发还是值得一看,一天就扫完了。最大的收获就是闭包与函数生成器。