编辑推荐
null
内容简介
作为一门现代Lisp方言,Clojure专为支持并发和Java兼容性而设计,能提供众多开发人员孜孜以求的解决方案。凭借通用性和诸多功能,Clojure日益受到企业级应用开发人员(尤其是那些希望远离命令式编程加速工作流程的开发人员)的青睐。Jeremy Anderson、Michael Gaare、Justin Holguin、Nick Bailey、Timothy Pratley著的这本《Clojure高级编程》条理清晰,紧贴实际介绍Clojure的用法,为职业程序员提供完备参考。本书首先介绍函数式编程基础知识,此后重点讲解与Clojure相关的特定主题,并从专业Clojure贡献者的角度提出诸多见解。资深Clojure人才日益紧俏,这本精品指南将助你迅速蜕变为Clojure专业开发人士。
作者介绍
Jeremy Anderson就职于美国密歇根州的Code Adept,这是一家提供高品质软件交付的咨询公司,业务涵盖软件开发、敏捷教导与培训服务。Jeremy是一名Clojure爱好者,对多种Clojure库的开发都有贡献。Jeremy对向用户提供编程培训极为热心,并作为志愿者在当地中学协助讲授计算机课程。 Michael Gaare就职于美国一家提供金融技术服务的初创公司NextAngles,担任平台技术负责人。从2012年起,Michael就采用Clojure开发专业的Web服务、数据处理系统与各种库(而非框架)。Michael爱好参加歌剧演出,大部分闲暇时间都与妻子和两个女儿度过。 Justin Holguín在美国波特兰的Puppet Labs担任软件工程师,负责Clojure后端服务的开发。Justin热爱函数式编程,对高级类型系统、基于属性的测试等能够提高软件稳定性的技术情有独钟。 Nick Bailey是一名Clojure爱好者,也负责Clojure java.jmx库的维护。Nick在总部位于美国加州的DataStax担任软件架构师,使用Clojure开发用于管理分布式数据库的企业级软件。Nick从2010年起开始接触Clojure,并由此成为这门语言的拥护者。 Timothy Pratley从2008年起开始使用Clojure,是这门语言的贡献者和倡导者。Timothy目前就职于美国旧金山的Outpace Systems,负责开发基于Clojure、ClojureScript和Clojure Android的解决方案。Timothy已有15年的专业软件开发经验,接触过许多编程语言、框架和数据库,热爱Clojure、Datomic数据库、结对编程(pair programming) ,喜欢思考。
目 录
第1章 保持初学者的心态 1.1 函数式思维 1.1.1 以值为导向 1.1.2 从递归的角度考虑问题 1.1.3 高阶函数 1.1.4 拥抱惰性 1.1.5 当变动成为必需时 1.1.6 Nil双关 1.1.7 函数式Web 1.2 改进面向对象编程 1.2.1 利用defmulti实现多态调度 1.2.2 使用deftype和defrecord定义类型 1.2.3 协议 1.2.4 reify 1.3 可持久化数据结构 1.4 塑造语言 1.5 小结 第2章 Clojure的快速反馈循环 2.1 REPL驱动开发 2.1.1 REPL在Leiningen中的基本操作 2.1.2 通过nREPL实现远程REPL 2.1.3 REPL在实际程序中的应用 2.1.4 REPL与编辑器的连接 2.2 代码重载 2.2.1 从REPL重载代码 2.2.2 自动重载代码 2.2.3 编写可重载的代码 2.3 小结 第3章 Web服务 3.1 项目总览 3.2 构成Web服务的元素 3.2.1 库,而非框架 3.2.2 3.2.3 路由 3.2.4 JSON端点 3.3 示例服务 3.3.1 创建项目 3.3.2 其他命名空间 3.3.3 默认中间件 3.3.4 存储协议 3.3.5 处理函数 3.3.6 中间件 3.3.7 路由 3.4 部署 3.4.1 使用Leiningen 3.4.2 编译Uberjar或Uberwar 3.4.3 托管 3.5 小结 第4章 测试 4.1 clojure.test测试基础 4.1.1 with-test宏 4.1.2 deftest库 4.1.3 are 4.1.4 使用基境 4.2 测试策略 4.2.1 数据库测试 4.2.2 Ring处理函数测试 4.2.3 采用with-redefs实现模拟/存根 4.2.4 重新定义动态 4.2.5 采用vcr-clj实现录制和重放 4.3 度量代码质量 4.3.1 采用cloverage度量代码覆盖率 4.3.2 采用kibit和bikeshed进行静态分析 4.3.3 将依赖置于掌控之中 4.4 其他测试框架 4.4.1 expectations 4.4.2 speclj 4.4.3 Cucumber 4.4.4 kerodon 4.5 小结 第5章 采用ClojureScript开发反应式网页 5.1 ClojureScript与众不同 5.2 ClojureScript初探 5.2.1 创建新的ClojureScript项目 5.2.2 采用Figwheel实现快速反馈 5.2.3 创建组件 5.2.4 数据建模 5.2.5 响应事件并处理状态变更 5.2.6 理解错误和警告信息 5.2.7 命名空间布局 5.2.8 样式 5.2.9 表单输入与表单处理 5.2.10 导航和路由 5.2.11 HTTP调用:与服务器进行通信 5.2.12 拖放 5.2.13 发布 5.3 Reagent进阶 5.3.1 形式1:返回向量的函数 5.3.2 形式2:返回组件的函数 5.3.3 形式3:返回类的函数 5.3.4 序列与键 5.3.5 自定义标记 5.3.6 反应 5.3.7 对样式的注释 5.4 Devcards的测试组件 5.5 与JavaScript的互操作性 5.6 一种语言,一种惯用法,多个平台 5.7 Closure编译器和Closure库浅析 5.8 采用DataScript处理建模状态 5.9 在浏览器中使用core.async 5.10 小结 第6章 Datomic数据库 6.1 Datomic基础 6.1.1 为何选择Datomic? 6.1.2 Datomic数据模型 6.1.3 查询 6.1.4 事务 6.1.5 索引:将数据切实绑定在一起 6.1.6 Datomic的独特架构 6.2 对应用数据建模 6.2.1 任务跟踪器应用的示例模式 6.2.2 实体id和分区 6.3 Datomic的Clojure API 6.3.1 基本设置 6.3.2 在REPL中小试牛刀 6.4 采用Datomic构建应用 6.4.1 用户函数 6.4.2 账户函数 6.4.3 任务函数 6.4.4 部署 6.4.5 局限性 6.5 小结 第7章 性能 7.1 何为性能? 7.2 性能优化的前提:选择正确的数据结构 7.3 基准测试 7.3.1 测定低速模块的时间 7.3.2 采用Criterium测定高速模块的时间 7.3.3 采用测试选择器进行性能测试 7.4 并行 7.5 记忆化 7.6 内联 7.7 利用瞬态机制安全地处理变动 7.8 性能分析 7.9 利用类型提示避免反射 7.10 Java标志 7.11 数值计算 7.12 小结
媒体评论
null