具体描述
Clojure是一种基于Java虚拟机的动态编程语言。如果你要转移到函数式编程,或是要应对来自并发的挑战,那么,Clojure是你的首选语言。Clojure具备以下优点:
◆ 简单,是这门优雅语言的核心; ◆ 独到的并发机制和函数式风格;
◆ Lisp的强大;◆ 充分发挥JVM的全部能力;
◆ 代码量往往比Java少,且易于维护。
本书是介绍Clojure的经典之作。它完全覆盖了Clojure 1.3版本提供的新特性,而且为了体现Clojure新生概念的重要意义,作者重新组织和编写了一些章节。
两位作者通过本书展示了如何从头构建一个应用,帮助读者充分了解Clojure程序的完整开发流程,还帮助读者运用Clojure思想为问题的各个部分找出解决方案。
通过阅读本书,你能够学会运用Clojure的方式进行思考,充分利用这门语言的优势,快速构建强大的程序。
作者简介
Stuart Halloway Clojure/core成员、Relevance公司CTO。
Aaron Bedra Clojure/core成员,在担任Relevance公司开发者期间,他成为一名技术领袖、演讲家和作家。他对Clojure语言及其支持库贡献颇多,同时也是Clojure社区中的活跃分子。Aaron牵头开发了一些商业的Clojure项目。目前他在Groupon工作。
目录信息
第1章 启航 1
1.1 为什么是Clojure 2
1.1.1 Clojure非常优雅 2
1.1.2 Clojure是Lisp的再度崛起 5
1.1.3 为什么是Lisp 5
1.1.4 它是Lisp,但括号少了 6
1.1.5 Clojure是函数式语言 8
1.1.6 Clojure简化了并发编程 9
1.1.7 Clojure与Java虚拟机彼此亲密无间 10
1.2 Clojure编程快速入门 11
1.2.1 使用REPL 12
1.2.2 特殊变量 13
1.2.3 添加共享状态 14
1.3 探索Clojure的程序库 16
1.3.1 require和use 17
1.3.2 查找文档 18
1.4 小结 20
第2章 探索Clojure 21
2.1 形式 21
2.1.1 使用数值类型 22
2.1.2 符号 24
2.1.3 字符串与字符 25
2.1.4 布尔值与nil 27
2.1.5 映射表、关键字和记录 28
2.2 读取器宏 30
2.3 函数 32
2.3.1 匿名函数 34
2.3.2 何时使用匿名函数 36
2.4 变量、绑定和命名空间 36
2.4.1 绑定 37
2.4.2 解构 38
2.4.3 命名空间 40
2.5 调用Java 43
2.5.1 访问构造函数、方法和字段 43
2.5.2 Javadoc 45
2.6 流程控制 45
2.6.1 分支结构与if 45
2.6.2 用do引入副作用 46
2.6.3 循环与loop/recur 47
2.7 我的for循环哪儿去了 48
2.8 元数据 52
2.9 小结 53
第3章 一切皆序列 55
3.1 一切皆序列 56
3.2 使用序列库 61
3.2.1 创建序列 61
3.2.2 过滤序列 64
3.2.3 序列谓词 65
3.2.4 序列转换 66
3.3 惰性和无限序列 69
3.4 Java亦可序化 71
3.4.1 序化Java容器 71
3.4.2 序化正则表达式 73
3.4.3 序化文件系统 74
3.4.4 序化流 75
3.4.5 序化XML 76
3.5 调用特定于结构的函数 77
3.5.1 列表函数 77
3.5.2 向量函数 78
3.5.3 映射表函数 79
3.5.4 集合函数 82
3.6 小结 85
第4章 函数式编程 86
4.1 函数式编程理念 86
4.1.1 纯函数 87
4.1.2 持久性数据结构 87
4.1.3 惰性和递归 88
4.1.4 引用透明性 89
4.1.5 FP的优势 89
4.1.6 6条规则 90
4.2 怎样偷个懒 91
4.2.1 尾递归 92
4.2.2 自递归与recur 94
4.2.3 惰性序列 95
4.2.4 聊聊变现 97
4.2.5 丢弃头元素 98
4.3 懒上加懒 99
4.4 再议递归 105
4.4.1 转换为自递归 106
4.4.2 采用Trampolining技术 107
4.4.3 用惰性化替代递归 109
4.4.4 用快存为递归抄条近路 112
4.5 小结 114
第5章 状态 115
5.1 并发、并行和锁定 116
5.2 引用与软事务内存 117
5.2.1 ref-set 118
5.2.2 事务的属性 118
5.2.3 alter 119
5.2.4 STM的工作原理:MVCC 120
5.2.5 commute 121
5.2.6 alter优先 122
5.2.7 为引用添加验证 123
5.3 使用原子进行非协同、同步的更新 124
5.4 使用代理进行异步更新 125
5.4.1 代理的验证与错误处理 126
5.4.2 在事务中包含代理 127
5.4.3 统一的更新模型 129
5.5 用变量管理线程内状态 129
5.5.1 远距离作用 131
5.5.2 用于Java回调API 132
5.6 Clojure贪吃蛇 134
5.6.1 函数式模型 135
5.6.2 使用STM建立可变模型 139
5.6.3 贪吃蛇的GUI 140
5.6.4 没有引用的贪吃蛇 143
5.7 小结 144
第6章 协议和数据类型 145
6.1 针对抽象编程 145
6.2 接口 148
6.3 协议 149
6.4 数据类型 153
6.5 记录 158
6.6 具体化 164
6.7 小结 165
第7章 宏 166
7.1 何时使用宏 166
7.2 编写流程控制宏 167
7.2.1 特殊形式、设计模式和宏 169
7.2.2 宏展开 170
7.2.3 when与when-not 172
7.3 让宏更加简单 173
7.3.1 语法引述、解引述和解引述拼接 175
7.3.2 在宏内部创建名称 176
7.4 宏的分类 178
7.4.1 有条件的求值 180
7.4.2 创建变量 181
7.4.3 Java互操作 183
7.4.4 延迟求值 184
7.4.5 对求值进行包装 184
7.4.6 避免Lambda表达式 186
7.5 小结 187
第8章 多重方法 188
8.1 没有多重方法的日子 188
8.2 定义多重方法 190
8.2.1 调度是继承感知的 192
8.2.2 多重方法的默认值 192
8.3 调度不简单 193
8.4 创建特设分类法 195
8.5 何时应该使用多重方法 199
8.5.1 Inspector 200
8.5.2 clojure.test 201
8.5.3 反例 202
8.6 小结 203
第9章 极尽Java之所能 204
9.1 异常处理 205
9.1.1 保持简单的异常处理 205
9.1.2 清理资源 206
9.1.3 响应异常 207
9.2 与整数搏斗 209
9.3 性能优化 210
9.3.1 使用基本类型提升性能 210
9.3.2 添加类型提示 213
9.4 在Clojure中创建Java类 215
9.4.1 创建Java代理 215
9.4.2 使用Java容器 217
9.5 真实世界的例子 220
9.5.1 真正的持续循环 222
9.5.2 日志 224
9.5.3 配置 226
9.6 小结 227
第10章 搭建应用 228
10.1 为电码译员游戏计分 229
10.2 测试计分器 232
10.2.1 手工构造输入 233
10.2.2 运行测试 234
10.2.3 验证输出 235
10.2.4 回归测试 236
10.3 test.generative 237
10.3.1 生成数据 237
10.3.2 程序化验证 238
10.3.3 defspec 240
10.3.4 运行测试 241
10.3.5 规格执行失败时 242
10.3.6 计分函数的产生式测试 243
10.4 创建用户界面 244
10.4.1 该是时候处理状态了 245
10.4.2 玩家界面 246
10.5 部署代码 249
10.5.1 Procfile 250
10.5.2 Heroku库 250
10.5.3 Git 251
10.5.4 安置你的应用 251
10.5.5 部署 252
10.6 小结 252
附录 编辑器 254
参考书目 255
· · · · · · (收起)
读后感
想象之中啊....木有那么强力. 不是那么NB的感觉....写的很乱. 理不出头绪. 英语差是主要... 如果可以的话 建议去看别的... Clojure in Action 据说还行 最近工作忙没有时间看...
极为生动地引诱你爱上来自下个世纪的语言 Clojure (By Howard Lewiship) 。 从一开始就展现了 Clojure 的各种迷人特点,特别适合 Java 程序员。
也许是 Clojure 系列中的第一本书吧,我也不确定。作者 Stuart Halloway 是核心开发者之一。这本书权威性是肯定足够的。不过需要一点点的 LISP 基础。推荐在学之前先看看 IBM Developer Networks 上的关于 Guile 的几篇文章,了解一些 LISP 的基础概念。不过听朋友说 The Joy o...
很遗憾,我发了两次包含本书勘误的下载地址(ubuntu one的共享地址)的书评,都被豆瓣迅速删掉了,无法理解豆瓣的判断策略。 无奈,只能麻烦各位需要下载的同学使用关键字“Clojure程序设计勘误表”进行搜索了,深表歉意。
想象之中啊....木有那么强力. 不是那么NB的感觉....写的很乱. 理不出头绪. 英语差是主要... 如果可以的话 建议去看别的... Clojure in Action 据说还行 最近工作忙没有时间看...
用户评价
在我看来,学习一门新的编程语言,其内在的“哲学”往往比表面的语法更重要。Clojure 的设计哲学,比如对 immutability 的强调,对副作用的严格控制,以及对数据驱动的推崇,都与我一直以来追求的“清晰、健壮、易于维护”的软件开发理念不谋而合。我希望这本书能够深入探讨 Clojure 背后的设计思想,让我理解为什么它会做出这些选择,以及这些选择如何体现在语言的各个层面。例如,我想了解 Clojure 的 `core.async` 库是如何在不引入复杂锁的情况下,实现高效的并发通信的。我也希望书中能有足够的篇幅,来阐述 Clojure 的 REPL(Read-Eval-Print Loop)驱动开发模式,以及它如何带来前所未有的交互性和迭代效率。如果书中能包含一些关于如何利用 Clojure 的函数组合能力,来构建领域特定语言(DSL)的例子,那将是极具启发性的。我希望这本书能够让我不仅学会 Clojure 的代码,更能理解 Clojure 的“之道”。
作为一名有一定编程基础的开发者,我对于新语言的学习通常会从“如何快速上手”和“它能解决我现有问题中的哪些痛点”这两个角度出发。因此,我非常希望能在这样一本 Clojure 书籍中看到对它在实际应用场景中的深刻剖析。例如,在处理复杂的数据转换、构建高性能的 Web 服务,或者开发需要高度并发的系统时,Clojure 究竟有哪些独特的优势?书中能否提供一些真实世界的案例研究,展示 Clojure 如何被应用于解决这些实际问题,并且与其他语言相比,它的表现如何?我特别关注的内容是如何利用 Clojure 的并发原语,如 agents、atoms 和 refs,来优雅地处理共享状态和多线程问题,而不是仅仅停留在理论层面。如果书中能提供一些关于如何进行性能调优的指导,或者如何利用 Clojure 的工具链来提升开发效率,那将更加锦上添花。我希望这本书能够让我看到 Clojure 不仅仅是“一种新的 Lisp”,而是一个能够切实提升我开发能力的强大工具。
我曾尝试过一些 Lisp 方言,但总感觉在实际开发中,它们的工具链和生态系统不够完善,或者学习曲线过于陡峭。Clojure 以其对 JVM 的良好支持,以及日益成熟的生态系统,吸引了我。我迫切希望在这样一本书中,能够找到关于 Clojure 如何与 Java 生态系统进行互操作的详细指南。例如,如何有效地调用 Java 类库,如何在 Clojure 和 Java 之间传递数据,以及如何在大型项目中集成 Clojure 和 Java 代码。我同样关注 Clojure 的构建工具,如 Leiningen 和 Boot,以及它们在项目管理、依赖管理和部署方面的强大功能。如果书中能提供一些关于如何使用 Clojure 的测试框架,以及如何构建可部署的应用程序的实用建议,那将对我非常有价值。我希望这本书能够让我克服对 Lisp 生态系统的疑虑,让我能够充满信心地将 Clojure 应用于实际工作中。
一直以来,我都在寻找一本能够真正引领我深入 Clojure 世界的指引。市面上关于函数式编程和 Lisp 方言的书籍不少,但很多要么过于理论化,要么缺乏实战的深度。我特别期待的是一本能够清晰地阐述 Clojure 的设计哲学,并且能够通过精心设计的示例,让我逐步掌握其核心概念和常用模式的书。我希望它不只是枯燥的语法罗列,而是能让我理解为什么 Clojure 会这样设计,它解决了什么问题,以及如何在实际项目中发挥它的优势。比如,关于 Clojure 的 immutable data structures,我希望能看到它们在并发编程中的威力是如何被体现的,而不是仅仅被当作一种“特性”来介绍。另外,对于 Clojure 的宏系统,我一直觉得它既强大又神秘,如果书中能有足够篇幅,用生动的例子来剖析宏的生成过程,以及如何利用宏来简化代码、提高抽象层次,那将是极大的帮助。我期待这本书能够成为我 Clojure 之旅的坚实起点,让我能够自信地开始我的第一个 Clojure 项目。
我对函数式编程的魅力一直心驰神往,而 Clojure 作为一个将函数式编程理念与 Lisp 的动态特性完美结合的语言,更是让我充满了好奇。我希望这本书能够以一种循序渐进的方式,带领我领略函数式编程的精髓,并理解 Clojure 在此基础上是如何构建的。我特别想看到关于 Clojure 的 map、filter、reduce 等高阶函数的深入讲解,以及如何利用它们来编写简洁、声明式、易于理解的代码。此外,对于 Clojure 的 persistent data structures,我希望能看到它们如何通过结构共享来实现高效的更新,以及在实际开发中,它们如何避免了许多传统命令式编程中常见的副作用问题。如果书中能穿插一些关于函数组合、柯里化、以及惰性求值等概念的解释,并展示它们在 Clojure 中的应用,那将是我非常期待的内容。我希望这本书能让我真正理解函数式思维,并将其融入到我的编程习惯中。
初次接触函数式编程,还是很不适应
书很薄,讲的太泛
入门,这个是下一步
当Lisp乘上JVM,那将是什么情况
翻译的中规中矩,作为一本入门的图书很适合我。接下来应该着一个实际的应用场景和深入一点的书。