描述
开 本: 32开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302471110丛书名: Web开发经典丛书
性而设计,能提供众多开发人员孜孜以求的解决方案。凭借
通用性和诸多功能,Clojure日益受到企业级应用开发人员(尤
其是那些希望远离命令式编程加速工作流程的开发人员)的青
睐。本书条理清晰,紧贴实际介绍Clojure的用法,为职业程
序员提供完备参考。本书首先介绍函数式编程基础知识,此
后重点讲解与Clojure相关的特定主题,并从专业Clojure贡献
者的角度提出诸多见解。资深Clojure人才日益紧俏,这本精
品指南将助你迅速蜕变为Clojure专业开发人士。
主要内容
◆ 探讨函数式编程与面向对象编程之间的差异,分析
Clojure如何消除这种差异
◆ 讨论快速反馈循环中声明式编程所用的REPL流程
◆ 演示如何使用ClojureScript来设计和开发反应式网页
◆ 介绍Clojure的特性、性能与功能,并讨论使其成为一门
重要语言的通用兼容性
◆ 涵盖Web服务、测试和Datomic数据库等主题,是完备的
专业指南和教程
◆ 从专家程序员和Clojure贡献者的角度,提出应用开发的
实用见解
第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
一门功能强大的程序设计语言不仅可以引导计算机执行既定的任务,也是一个能体现开发人员进程思路的框架。——《计算机程序的构造和解释》(SICP) 本书假定读者已具备程序设计和Clojure的基础知识,但尚未达到精通Clojure的程度。本书涵盖的范围较广,包括改变读者的思考方式和编程习惯,如何将REPL集成到用户的开发程序中,以及采用Ring和ClojureScript构建实际的应用。本书架构本书将提供若干实际的示例,以帮助读者将所学的Clojure知识运用到日常的编程工作中,而非纸上谈兵式的空谈。第1章该章将介绍Clojure在程序设计中的独特视角。读者将了解Clojure有别于其他语言的原因,如为何默认使用不可变性、Clojure为何也能用于面向对象编程等。第2章该章将介绍精通REPL所需的各种知识,以及REPL与实际应用交互时的技巧和技术。读者将学习如何从REPL运行代码和测试,以及编写便于从REPL重载而不需要重启的代码。第3章该章将讨论采用Compojure创建Web服务,以及所涉及的相关概念(如路由、处理器、中间件等)。读者将开发一个完整的Web服务,并学习与部署应用有关的各种技术。第4章该章将讨论Clojure中的测试,并重点介绍clojure.test测试库。读者将学习在各种常见测试场景中采用的技术,以及评估代码质量的工具。第5章该章将讨论如何使用ClojureScript开发一个类似于Trello的任务管理系统,并介绍如何在服务器端与客户端应用之间实现函数共享。第6章该章将介绍Datomic数据库,并讨论后者如何将不可变的概念应用到数据库中。读者将学习如何在Datomic中进行数据的建模和提取,并运用所学的知识创建一个能支持任务管理系统(在第5章开发)的数据库。第7章该章将讨论Clojure的性能,以及如何提高Clojure代码的执行速度。利用某些技巧,可以让Clojure代码的执行速度与Java代码一样快。所需工具俗话说:“工欲善其事,必先利其器”。幸运的是,学习和使用本书示例仅需要Java、Leiningen以及一种优秀的文本编辑器。Java目前,大部分计算机都预装了Java。不过为运行本书中的示例,读者应确保安装Java的版本。书中的代码示例在JDK 1.8.0_25下编写并测试通过。请浏览Oracle JDK下载页面 中的文档,以获得在不同平台下载和安装JDK的信息。Leiningen根据官网 的描述,Leiningen是对Clojure贡献的项目。对具有Java背景的读者而言,Leiningen之于Clojure,如同Maven之于Java,只是少了各种XML。用户可以从容构建Clojure项目,避免陷入令自己心急火燎的窘境。Leiningen能管理项目依赖项,并声明性地描述项目和配置,还提供代码分析、自动化等大量实用的插件。Leiningen可以有效提高Clojure的使用体验。幸运的是,配置和运行Leiningen相当简单。读者应安装Leiningen的版本,截至本书写作时,其版本为2.5.3。请访问Leiningen网站,以获得在不同编程环境下配置Leiningen的信息。编辑器完成Leiningen的安装后,应选择一种优秀的文本编辑器,以提高编写Clojure代码的效率。如果读者已有熟悉的编辑器,继续使用它们即可。但是,如果所用的编辑器不支持括号平衡、REPL集成、语法高亮、代码缩进等基本功能,应考虑换用以下编辑器。EmacsEmacs为众多资深程序员所青睐,它与Lisp的历史一样悠久。尽管上手不易,但Emacs被广泛认为是一种功能极强大的编辑器,其可扩展性无出其右。目前有许多有助于改善学习难度的自定义Emacs配置,如Emacs Prelude 。后者合理的默认配置,可以用于包括Clojure在内的多种语言的开发。LightTableLightTable 初是Kickstarter 上的一个项目,现已发展为一个集代码编辑器、REPL、文档浏览器于一身的IDE。LightTable功能强大,目前在Clojure社区备受推崇。Cursive (IntelliJ)如果读者熟悉某种JetBrains IDE的使用,会很高兴看到这款名为Cursive的IntelliJ插件 。Cursive不仅能很好地与nREPL进行集成,也提供强大的重构支持,以及调试和Java互操作性等功能。Counterclockwise (Eclipse)熟悉Eclipse的读者可以考虑使用Counterclockwise ,后者既是一款Eclipse插件,也可以作为一个独立的编辑器使用。Counterclockwise具备与上述几种编辑器相同的特性,以及REPL集成、内联代码评估等功能。本书约定为帮助读者在阅读本书的过程中获取多信息,并随时了解当前处理的事项,本书使用了许多约定。注意:列出注释、提示、暗示、技巧或对当前讨论的弦外之音。本书通过两种方式来显示代码:● 对于大多数代码示例,使用没有突出显示的等宽字体来表示。● 对在当前上下文中特别重要的代码,用粗体字来强调显示。勘误表尽管我们已经尽了各种努力来保证文章或代码中不出现错误,但是错误总是难免的,如果你在本书中找到了错误,例如拼写错误或代码错误,请告诉我们,我们将非常感激。通过勘误表,可以让其他读者避免受挫,当然,这还有助于提供更高质量的信息。请给[email protected]发电子邮件,我们就会检查你的反馈信息,如果是正确的,我们将在本书的后续版本中采用。要在网站上找到本书英文版的勘误表,可以登录http://www.wrox.com,通过Search工具或书名列表查找本书,然后在本书的细目页面上,单击Book Errata链接。在这个页面上可以查看到Wrox编辑已提交和粘贴的所有勘误项。完整的图书列表还包括每本书的勘误表,网址是www.wrox.com/misc-pages/booklist.shtml。p2p.wrox.com要与作者和同行讨论,请加入p2p.wrox.com上的P2P论坛。这个论坛是一个基于Web的系统,便于你张贴与Wrox图书相关的消息和相关技术,与其他读者和技术用户交流心得。该论坛提供了订阅功能,当论坛上有新的消息时,它可以给你传送感兴趣的论题。Wrox作者、编辑和其他业界专家和读者都会到这个论坛上来探讨问题。在http://p2p.wrox.com上,有许多不同的论坛,它们不仅有助于阅读本书,还有助于开发自己的应用程序。要加入论坛,可以遵循下面的步骤:(1) 进入p2p.wrox.com,单击Register链接。(2) 阅读使用协议,并单击Agree按钮。(3) 填写加入该论坛所需要的信息和自己希望提供的其他信息,单击Submit按钮。(4) 你会收到一封电子邮件,其中的信息描述了如何验证账户,完成加入过程。注意:不加入P2P也可以阅读论坛上的消息,但要张贴自己的消息,就必须加入该论坛。加入论坛后,就可以张贴新消息,响应其他用户张贴的消息。可以随时在Web上阅读消息。如果要让该网站给自己发送特定论坛中的消息,可以单击论坛列表中该论坛名旁边的Subscribe to this Forum图标。关于使用Wrox P2P的更多信息,可阅读P2P FAQ,了解论坛软件的工作情况以及P2P和Wrox图书的许多常见问题。要阅读FAQ,可以在任意P2P页面上单击FAQ链接。源代码在读者学习本书中的示例时,可以手工输入所有的代码,也可以使用本书附带的源代码文件。本书使用的所有源代码都可从本书合作站点http://www.wrox.com/。登录站点http://www.wrox.com/,使用Search工具或使用书名列表就可以找到本书。接着单击本书细目页面上的Download Code链接,就可以获得所有的源代码。还可以直接访问www.wiley.com/go/professionalclojure或https://github.com/backstopmedia/clojurebook下载本书源代码。也可以访问www.tupwk.com.cn/downpage,输入本书中文书名或中文ISBN,下载各章的源代码。此外,可扫描本书封底的二维码,直接下载。注意: 由于许多图书的标题都很类似,所以按ISBN搜索是简单的,本书英文版的ISBN是978-1-119-26727-0。下载代码后,只需要用自己喜欢的解压缩软件对它进行解压缩即可。另外,也可以进入http://www.wrox.com/dynamic/books/download.aspx上的Wrox代码下载主页,查看本书和其他Wrox图书的所有代码。
评论
还没有评论。