Clojure高级编程(Web开发经典丛书)
第1章 保持初学者的心态 1
1.1 函数式思维 2
1.1.1 以值为导向 2
1.1.2 从递归的角度考虑问题 4
1.1.3 高阶函数 7
1.1.4 拥抱惰性 11
1.1.5 当变动成为必需时 12
1.1.6 Nil双关 15
1.1.7 函数式Web 16
1.2 改进面向对象编程 17
查看完整
1.1 函数式思维 2
1.1.1 以值为导向 2
1.1.2 从递归的角度考虑问题 4
1.1.3 高阶函数 7
1.1.4 拥抱惰性 11
1.1.5 当变动成为必需时 12
1.1.6 Nil双关 15
1.1.7 函数式Web 16
1.2 改进面向对象编程 17
查看完整
JeremyAnderson就职于美国密歇根州的CodeAdept,这是一家提供高品质软件交付的咨询公司,业务涵盖软件开发、敏捷教导与培训服务。Jeremy是一名Clojure爱好者,对多种Clojure库的开发都有贡献。Jeremy对向用户提供编程培训极为热心,并作为志愿者在当地中学协助讲授计算机课程。
MichaelGaare就职于美国一家提供金融技术服务的初创公司NextAngles,担任平台技术负责人。从2012年起,Michael就采用Clojure开发专业的Web服务、数据处理系统与各种库(而非框架)。Michael爱好参加歌剧演出,大部分闲暇时间都与妻子和两个女儿度过。
JustinHolguín在美国波特兰的PuppetLabs担任软件工程师,负责Clojure后端服务的开发。Justin热爱函数式编程,对高级类型系统、基于…
查看完整
MichaelGaare就职于美国一家提供金融技术服务的初创公司NextAngles,担任平台技术负责人。从2012年起,Michael就采用Clojure开发专业的Web服务、数据处理系统与各种库(而非框架)。Michael爱好参加歌剧演出,大部分闲暇时间都与妻子和两个女儿度过。
JustinHolguín在美国波特兰的PuppetLabs担任软件工程师,负责Clojure后端服务的开发。Justin热爱函数式编程,对高级类型系统、基于…
查看完整
作为一门现代Lisp方言,Clojure专为支持并发和Java兼容性而设计,能提供众多开发人员孜孜以求的解决方案。凭借通用性和诸多功能,Clojure日益受到企业级应用开发人员(尤其是那些希望远离命令式编程加速工作流程的开发人员)的青睐。本书条理清晰,紧贴实际介绍Clojure的用法,为职业程序员提供完备参考。本书首先介绍函数式编程基础知识,此后重点讲解与Clojure相关的特定主题,并从专业Clojure贡献者的角度提出诸多见解。资深Clojure人才日益紧俏,这本精品指南将助你迅速蜕变为Clojure专业开发人士。主要内容◆探讨函数式编程与面向对象编程之间的差异,分析Clojure如何消除这种差异◆讨论快速反馈循环中声明式编程所用的REPL流程◆演示如何使用ClojureScript来设计和开发反应式网页◆介绍Clojure的特性、性能与功能,并讨论使其成为一门重要语言的通用兼容性◆涵盖Web服务、测试和Datomic数据库等主题,是完备的专业指…
查看完整
查看完整
第1章 保持初学者的心态 1
1.1 函数式思维 2
1.1.1 以值为导向 2
1.1.2 从递归的角度考虑问题 4
1.1.3 高阶函数 7
1.1.4 拥抱惰性 11
1.1.5 当变动成为必需时 12
1.1.6 Nil双关 15
1.1.7 函数式Web 16
1.2 改进面向对象编程 17
1.2.1 利用defmulti实现
多态调度 18
1.2.2 使用deftype和defrecord
定义类型 20
1.2.3 协议 21
1.2.4 reify 22
1.3 可持久化数据结构 23
1.4 塑造语言 27
1.5 小结 29
第2章 Clojure的快速反馈循环 31
2.1 REPL驱动开发 31
2.1.1 REPL在Leiningen中的
基本操作 32
2.1.2 通过nREPL实现
远程REPL 34
2.1.3 REPL在实际程序中的
应用 36
2.1.4 REPL与编辑器的连接 40
2.2 代码重载 41
2.2.1 从REPL重载代码 41
2.2.2 自动重载代码 45
2.2.3 编写可重载的代码 52
2.3 小结 54
第3章 Web服务 55
3.1 项目总览 55
3.2 构成Web服务的元素 57
3.2.1 库,而非框架 57
3.2.2 HTTP 57
3.2.3 路由 66
3.2.4 JSON端点 73
3.3 示例服务 78
3.3.1 创建项目 78
3.3.2 其他命名空间 78
3.3.3 默认中间件 81
3.3.4 存储协议 82
3.3.5 处理函数 87
3.3.6 中间件 92
3.3.7 路由 94
3.4 部署 99
3.4.1 使用Leiningen 99
3.4.2 编译Uberjar或Uberwar 100
3.4.3 托管 101
3.5 小结 102
第4章 测试 105
4.1 clojure.test测试基础 106
4.1.1 with-test宏 106
4.1.2 deftest库 107
4.1.3 are 108
4.1.4 使用基境 109
4.2 测试策略 110
4.2.1 数据库测试 110
4.2.2 Ring处理函数测试 112
4.2.3 采用with-redefs实现
模拟/存根 115
4.2.4 重新定义动态var 117
4.2.5 采用vcr-clj实现录制和
重放 118
4.3 度量代码质量 119
4.3.1 采用cloverage度量
代码覆盖率 120
4.3.2 采用kibit和bikeshed
进行静态分析 122
4.3.3 将依赖置于掌控之中 124
4.4 其他测试框架 127
4.4.1 expectations 127
4.4.2 speclj 128
4.4.3 Cucumber 129
4.4.4 kerodon 136
4.5 小结 137
第5章 采用ClojureScript开发
反应式网页 139
5.1 ClojureScript与众不同 140
5.2 ClojureScript初探 142
5.2.1 创建新的ClojureScript
项目 142
5.2.2 采用Figwheel实现
快速反馈 143
5.2.3 创建组件 144
5.2.4 数据建模 145
5.2.5 响应事件并处理状态
变更 147
5.2.6 理解错误和警告信息 148
5.2.7 命名空间布局 151
5.2.8 样式 152
5.2.9 表单输入与表单处理 153
5.2.10 导航和路由 156
5.2.11 HTTP调用:与服务器
进行通信 157
5.2.12 拖放 160
5.2.13 发布 160
5.3 Reagent进阶 162
5.3.1 形式1:返回向量的
函数 162
5.3.2 形式2:返回组件的
函数 163
5.3.3 形式3:返回类的函数 164
5.3.4 序列与键 165
5.3.5 自定义标记 167
5.3.6 反应 168
5.3.7 对样式的注释 170
5.4 Devcards的测试组件 170
5.5 与JavaScript的互操作性 174
5.6 一种语言,一种惯用法,
多个平台 176
5.7 Closure编译器和Closure
库浅析 176
5.8 采用DataScript处理
建模状态 177
5.9 在浏览器中使用core.async 178
5.10 小结 179
第6章 Datomic数据库 181
6.1 Datomic基础 182
6.1.1 为何选择Datomic? 182
6.1.2 Datomic数据模型 184
6.1.3 查询 187
6.1.4 事务 192
6.1.5 索引:将数据切实绑定
在一起 195
6.1.6 Datomic的独特架构 198
6.2 对应用数据建模 200
6.2.1 任务跟踪器应用的
示例模式 200
6.2.2 实体id和分区 209
6.3 Datomic的Clojure API 209
6.3.1 基本设置 209
6.3.2 在REPL中小试牛刀 213
6.4 采用Datomic构建应用 219
6.4.1 用户函数 219
6.4.2 账户函数 222
6.4.3 任务函数 223
6.4.4 部署 227
6.4.5 局限性 227
6.5 小结 228
第7章 性能 231
7.1 何为性能? 233
7.2 性能优化的前提:选择
正确的数据结构 233
7.3 基准测试 235
7.3.1 测定低速模块的时间 235
7.3.2 采用Criterium测定高速
模块的时间 237
7.3.3 采用测试选择器进行
性能测试 239
7.4 并行 239
7.5 记忆化 240
7.6 内联 241
7.7 利用瞬态机制安全地
处理变动 243
7.8 性能分析 243
7.9 利用类型提示避免反射 244
7.10 Java标志 246
7.11 数值计算 246
7.12 小结 247
^ 收 起
1.1 函数式思维 2
1.1.1 以值为导向 2
1.1.2 从递归的角度考虑问题 4
1.1.3 高阶函数 7
1.1.4 拥抱惰性 11
1.1.5 当变动成为必需时 12
1.1.6 Nil双关 15
1.1.7 函数式Web 16
1.2 改进面向对象编程 17
1.2.1 利用defmulti实现
多态调度 18
1.2.2 使用deftype和defrecord
定义类型 20
1.2.3 协议 21
1.2.4 reify 22
1.3 可持久化数据结构 23
1.4 塑造语言 27
1.5 小结 29
第2章 Clojure的快速反馈循环 31
2.1 REPL驱动开发 31
2.1.1 REPL在Leiningen中的
基本操作 32
2.1.2 通过nREPL实现
远程REPL 34
2.1.3 REPL在实际程序中的
应用 36
2.1.4 REPL与编辑器的连接 40
2.2 代码重载 41
2.2.1 从REPL重载代码 41
2.2.2 自动重载代码 45
2.2.3 编写可重载的代码 52
2.3 小结 54
第3章 Web服务 55
3.1 项目总览 55
3.2 构成Web服务的元素 57
3.2.1 库,而非框架 57
3.2.2 HTTP 57
3.2.3 路由 66
3.2.4 JSON端点 73
3.3 示例服务 78
3.3.1 创建项目 78
3.3.2 其他命名空间 78
3.3.3 默认中间件 81
3.3.4 存储协议 82
3.3.5 处理函数 87
3.3.6 中间件 92
3.3.7 路由 94
3.4 部署 99
3.4.1 使用Leiningen 99
3.4.2 编译Uberjar或Uberwar 100
3.4.3 托管 101
3.5 小结 102
第4章 测试 105
4.1 clojure.test测试基础 106
4.1.1 with-test宏 106
4.1.2 deftest库 107
4.1.3 are 108
4.1.4 使用基境 109
4.2 测试策略 110
4.2.1 数据库测试 110
4.2.2 Ring处理函数测试 112
4.2.3 采用with-redefs实现
模拟/存根 115
4.2.4 重新定义动态var 117
4.2.5 采用vcr-clj实现录制和
重放 118
4.3 度量代码质量 119
4.3.1 采用cloverage度量
代码覆盖率 120
4.3.2 采用kibit和bikeshed
进行静态分析 122
4.3.3 将依赖置于掌控之中 124
4.4 其他测试框架 127
4.4.1 expectations 127
4.4.2 speclj 128
4.4.3 Cucumber 129
4.4.4 kerodon 136
4.5 小结 137
第5章 采用ClojureScript开发
反应式网页 139
5.1 ClojureScript与众不同 140
5.2 ClojureScript初探 142
5.2.1 创建新的ClojureScript
项目 142
5.2.2 采用Figwheel实现
快速反馈 143
5.2.3 创建组件 144
5.2.4 数据建模 145
5.2.5 响应事件并处理状态
变更 147
5.2.6 理解错误和警告信息 148
5.2.7 命名空间布局 151
5.2.8 样式 152
5.2.9 表单输入与表单处理 153
5.2.10 导航和路由 156
5.2.11 HTTP调用:与服务器
进行通信 157
5.2.12 拖放 160
5.2.13 发布 160
5.3 Reagent进阶 162
5.3.1 形式1:返回向量的
函数 162
5.3.2 形式2:返回组件的
函数 163
5.3.3 形式3:返回类的函数 164
5.3.4 序列与键 165
5.3.5 自定义标记 167
5.3.6 反应 168
5.3.7 对样式的注释 170
5.4 Devcards的测试组件 170
5.5 与JavaScript的互操作性 174
5.6 一种语言,一种惯用法,
多个平台 176
5.7 Closure编译器和Closure
库浅析 176
5.8 采用DataScript处理
建模状态 177
5.9 在浏览器中使用core.async 178
5.10 小结 179
第6章 Datomic数据库 181
6.1 Datomic基础 182
6.1.1 为何选择Datomic? 182
6.1.2 Datomic数据模型 184
6.1.3 查询 187
6.1.4 事务 192
6.1.5 索引:将数据切实绑定
在一起 195
6.1.6 Datomic的独特架构 198
6.2 对应用数据建模 200
6.2.1 任务跟踪器应用的
示例模式 200
6.2.2 实体id和分区 209
6.3 Datomic的Clojure API 209
6.3.1 基本设置 209
6.3.2 在REPL中小试牛刀 213
6.4 采用Datomic构建应用 219
6.4.1 用户函数 219
6.4.2 账户函数 222
6.4.3 任务函数 223
6.4.4 部署 227
6.4.5 局限性 227
6.5 小结 228
第7章 性能 231
7.1 何为性能? 233
7.2 性能优化的前提:选择
正确的数据结构 233
7.3 基准测试 235
7.3.1 测定低速模块的时间 235
7.3.2 采用Criterium测定高速
模块的时间 237
7.3.3 采用测试选择器进行
性能测试 239
7.4 并行 239
7.5 记忆化 240
7.6 内联 241
7.7 利用瞬态机制安全地
处理变动 243
7.8 性能分析 243
7.9 利用类型提示避免反射 244
7.10 Java标志 246
7.11 数值计算 246
7.12 小结 247
^ 收 起
JeremyAnderson就职于美国密歇根州的CodeAdept,这是一家提供高品质软件交付的咨询公司,业务涵盖软件开发、敏捷教导与培训服务。Jeremy是一名Clojure爱好者,对多种Clojure库的开发都有贡献。Jeremy对向用户提供编程培训极为热心,并作为志愿者在当地中学协助讲授计算机课程。
MichaelGaare就职于美国一家提供金融技术服务的初创公司NextAngles,担任平台技术负责人。从2012年起,Michael就采用Clojure开发专业的Web服务、数据处理系统与各种库(而非框架)。Michael爱好参加歌剧演出,大部分闲暇时间都与妻子和两个女儿度过。
JustinHolguín在美国波特兰的PuppetLabs担任软件工程师,负责Clojure后端服务的开发。Justin热爱函数式编程,对高级类型系统、基于属性的测试等能够提高软件稳定性的技术情有独钟。
NickBailey是一名Clojure爱好者,也负责Clojurejava.jmx库的维护。Nick在总部位于美国加州的DataStax担任软件架构师,使用Clojure开发用于管理分布式数据库的企业级软件。Nick从2010年起开始接触Clojure,并由此成为这门语言的拥护者。
TimothyPratley从2008年起开始使用Clojure,是这门语言的贡献者和倡导者。Timothy目前就职于美国旧金山的OutpaceSystems,负责开发基于Clojure、ClojureScript和ClojureAndroid的解决方案。Timothy已有15年的专业软件开发经验,接触过许多编程语言、框架和数据库,热爱Clojure、Datomic数据库、结对编程(pairprogramming),喜欢思考。
^ 收 起
MichaelGaare就职于美国一家提供金融技术服务的初创公司NextAngles,担任平台技术负责人。从2012年起,Michael就采用Clojure开发专业的Web服务、数据处理系统与各种库(而非框架)。Michael爱好参加歌剧演出,大部分闲暇时间都与妻子和两个女儿度过。
JustinHolguín在美国波特兰的PuppetLabs担任软件工程师,负责Clojure后端服务的开发。Justin热爱函数式编程,对高级类型系统、基于属性的测试等能够提高软件稳定性的技术情有独钟。
NickBailey是一名Clojure爱好者,也负责Clojurejava.jmx库的维护。Nick在总部位于美国加州的DataStax担任软件架构师,使用Clojure开发用于管理分布式数据库的企业级软件。Nick从2010年起开始接触Clojure,并由此成为这门语言的拥护者。
TimothyPratley从2008年起开始使用Clojure,是这门语言的贡献者和倡导者。Timothy目前就职于美国旧金山的OutpaceSystems,负责开发基于Clojure、ClojureScript和ClojureAndroid的解决方案。Timothy已有15年的专业软件开发经验,接触过许多编程语言、框架和数据库,热爱Clojure、Datomic数据库、结对编程(pairprogramming),喜欢思考。
^ 收 起
作为一门现代Lisp方言,Clojure专为支持并发和Java兼容性而设计,能提供众多开发人员孜孜以求的解决方案。凭借通用性和诸多功能,Clojure日益受到企业级应用开发人员(尤其是那些希望远离命令式编程加速工作流程的开发人员)的青睐。本书条理清晰,紧贴实际介绍Clojure的用法,为职业程序员提供完备参考。本书首先介绍函数式编程基础知识,此后重点讲解与Clojure相关的特定主题,并从专业Clojure贡献者的角度提出诸多见解。资深Clojure人才日益紧俏,这本精品指南将助你迅速蜕变为Clojure专业开发人士。主要内容◆探讨函数式编程与面向对象编程之间的差异,分析Clojure如何消除这种差异◆讨论快速反馈循环中声明式编程所用的REPL流程◆演示如何使用ClojureScript来设计和开发反应式网页◆介绍Clojure的特性、性能与功能,并讨论使其成为一门重要语言的通用兼容性◆涵盖Web服务、测试和Datomic数据库等主题,是完备的专业指南和教程◆从专家程序员和Clojure贡献者的角度,提出应用开发的实用见解
^ 收 起
^ 收 起
比价列表