互联网
类型
可以朗读
语音朗读
185千字
字数
2018-09-01
发行日期
展开全部
主编推荐语
Clojure快速入门指南,全面涵盖各种实用特性。
内容简介
Clojure是用于JVM的一种现代化Lisp语言,具有你所期待的优势:高阶类函数、宏、清晰的Lisp编程风格。它支持函数式编程,对并发编程和创建领域特定语言来说非常理想。Clojure可以解决更困难的问题,做出更快的更改,终得到更小的代码库。因此,Clojure有许多成功案例是毫不奇怪的。
本书第2版做了大量修订和更新,涵盖Clojure 1.6的新特性。本书从抽象的理论到实际案例,对Clojure语言进行了全面、系统阐释。首先,你将了解Clojure作为通用语言的使用方法。接着,你将探索Clojure高效的并发模型,这种模型基于软件事务内存(STM)的数据库概念。通过在JVM上运行的Clojure DSL,效率将提高到一个新的水平。在阅读本书的过程中,你还将学习编写更小、更安全、更快速代码的无数技巧和技术。
目录
- 版权信息
- 译者序
- 第1版赞誉
- 第2版序言
- 第1版序言
- 关于本书
- 致谢
- 第1章 Clojure简介
- 1.1 Clojure的概念以及采用的原因
- 1.1.1 Clojure:现代化的Lisp语言
- 1.1.2 Clojure:务实的函数式编程
- 1.1.3 JVM之上的Clojure
- 1.2 语言基础知识
- 1.2.1 Lisp语法
- 1.2.2 括号
- 1.3 宿主互操作性:JVM速成教程
- 1.3.1 Java类型、类和对象
- 1.3.2 点(.)和new运算符
- 1.3.3 线程和并发性
- 1.4 小结
- 第2章 Clojure要素:数据结构和函数
- 2.1 在REPL上编码
- 2.1.1 Clojure REPL
- 2.1.2 “Hello,world!”
- 2.1.3 用doc、find-doc和apropos查找文档
- 2.1.4 Clojure语法的另外几个要点
- 2.2 Clojure数据结构
- 2.2.1 nil、真值和假值
- 2.2.2 字符和字符串
- 2.2.3 Clojure数值
- 2.2.4 符号和关键字
- 2.2.5 列表
- 2.2.6 向量
- 2.2.7 映射
- 2.2.8 序列
- 2.3 程序结构
- 2.3.1 函数
- 2.3.2 let形式
- 2.3.3 do的副作用
- 2.3.4 读取器宏
- 2.4 程序流程
- 2.4.1 条件
- 2.4.2 逻辑函数
- 2.4.3 函数式循环
- 2.4.4 串行宏
- 2.5 小结
- 第3章 Clojure构件
- 3.1 元数据
- 3.1.1 Java类型提示
- 3.1.2 Java原始类型和数组类型
- 3.2 Java异常:try和throw
- 3.3 函数
- 3.3.1 定义函数
- 3.3.2 调用函数
- 3.3.3 高阶函数
- 3.3.4 编写高阶函数
- 3.3.5 匿名函数
- 3.3.6 关键字和符号
- 3.4 作用域
- 3.4.1 变量和绑定
- 3.4.2 重温let形式
- 3.4.3 词法闭包
- 3.5 命名空间
- 3.5.1 ns宏
- 3.5.2 使用命名空间
- 3.6 解构
- 3.6.1 向量绑定
- 3.6.2 映射绑定
- 3.7 读取器字面量
- 3.8 小结
- 第4章 多重方法多态
- 4.1 多态及其类型
- 4.1.1 参数化多态
- 4.1.2 随意多态
- 4.1.3 子类多态
- 4.2 用多重方法实现多态
- 4.2.1 不使用多重方法时的情况
- 4.2.2 使用多重方法实现随意多态
- 4.2.3 多分派
- 4.2.4 使用多重方法实现子类多态
- 4.3 小结
- 第5章 探索Clojure和Java互操作
- 5.1 从Clojure中调用Java
- 5.1.1 将Java类导入Clojure
- 5.1.2 创建实例
- 5.1.3 访问方法和域
- 5.1.4 宏和句点特殊形式
- 5.1.5 有助于使用Java的Clojure宏
- 5.1.6 实现接口和扩展类
- 5.2 将Clojure代码编译为Java字节码
- 5.2.1 示例:两个计算器的故事
- 5.2.2 用gen-class和gen-interface创建Java类和接口
- 5.3 从Java调用Clojure
- 5.4 小结
- 第6章 状态和并发的世界
- 6.1 状态存在的问题
- 6.1.1 共享状态的常见问题
- 6.1.2 传统解决方案
- 6.2 标识与值的分离
- 6.2.1 不可变值
- 6.2.2 对象和时间
- 6.2.3 不可变性和并发性
- 6.3 Clojure的方法
- 6.3.1 不可变性与性能
- 6.3.2 托管引用
- 6.4 引用
- 6.4.1 创建引用
- 6.4.2 引用突变
- 6.4.3 软件事务内存
- 6.5 代理
- 6.5.1 创建代理
- 6.5.2 代理突变
- 6.5.3 使用代理
- 6.5.4 STM事务中的副作用
- 6.6 原子
- 6.6.1 创建原子
- 6.6.2 原子突变
- 6.7 变量
- 6.7.1 创建变量和根绑定
- 6.7.2 变量绑定
- 6.8 状态及其统一访问模型
- 6.8.1 创建
- 6.8.2 读取
- 6.8.3 突变
- 6.8.4 事务
- 6.8.5 监视突变
- 6.9 决定使用哪种托管引用类别
- 6.10 future和promise
- 6.10.1 future
- 6.10.2 promise
- 6.11 小结
- 第7章 通过宏发展Clojure
- 7.1 宏的基础知识
- 7.1.1 文本替换
- 7.1.2 unless示例
- 7.1.3 宏模板
- 7.1.4 回顾:为什么使用宏
- 7.2 Clojure内部的宏
- 7.2.1 comment
- 7.2.2 declare
- 7.2.3 defonce
- 7.2.4 and
- 7.2.5 time
- 7.3 编写自己的宏
- 7.3.1 infix
- 7.3.2 randomly
- 7.3.3 defwebmethod
- 7.3.4 defnn
- 7.3.5 assert-true
- 7.4 小结
- 第8章 函数式编程深入研究
- 8.1 使用高阶函数
- 8.1.1 收集函数结果
- 8.1.2 对一系列事物进行归纳
- 8.1.3 过滤一系列事物
- 8.2 部分应用
- 8.2.1 函数适配
- 8.2.2 定义函数
- 8.3 闭包
- 8.3.1 自由变量与闭包
- 8.3.2 延迟计算与闭包
- 8.3.3 闭包与对象
- 8.3.4 一个Clojure对象系统
- 8.4 小结
- 第9章 协议、记录和类型
- 9.1 表达式问题
- 9.1.1 建立示例场景
- 9.1.2 对表达式问题的仔细观察和一些潜在的解决方案
- 9.1.3 Clojure多重方法解决方案
- 9.2 研究表达式问题的运算端
- 9.2.1 def-modus-operandi
- 9.2.2 detail-modus-operandi
- 9.2.3 跟踪你的操作方法
- 9.2.4 解决方案的错误处理和故障点
- 9.3 用协议研究表达式问题的数据类型方面
- 9.3.1 defprotocol与extend-protocol
- 9.3.2 用defrecord、deftype和reify定义数据类型
- 9.4 小结
- 第10章 测试驱动开发及其他
- 10.1 TDD入门:操纵字符串中的日期
- 10.1.1 第一个断言
- 10.1.2 month-from和year-from
- 10.1.3 as-string
- 10.1.4 递增和递减
- 10.1.5 无情地重构
- 10.2 通过模拟和打桩改善测试
- 10.2.1 示例:费用查找器
- 10.2.2 打桩
- 10.2.3 模拟
- 10.2.4 模拟与桩的对比
- 10.2.5 管理打桩和模拟状态
- 10.3 组织测试
- 10.3.1 testing宏
- 10.3.2 are宏
- 10.4 小结
- 第11章 更多的宏和DSL
- 11.1 对宏的快速回顾
- 11.2 指代宏
- 11.2.1 指代式if
- 11.2.2 thread-it宏
- 11.3 将计算转移到编译时
- 11.3.1 示例:不使用宏的循环加密
- 11.3.2 让编译器更努力地工作
- 11.4 生成宏的宏
- 11.4.1 示例模板
- 11.4.2 实现make-synonym
- 11.4.3 使用宏生成宏的原因
- 11.5 领域特定语言
- 11.5.1 DSL驱动设计
- 11.5.2 用户分类
- 11.6 小结
- 附录A 安装Clojure
- A.1 Try Clojure
- A.2 Clojure.jar
- A.3 Leiningen
- 结语
展开全部
出版方
机械工业出版社有限公司
机械工业出版社是全国优秀出版社,自1952年成立以来,坚持为科技、为教育服务,以向行业、向学校提供优质、权威的精神产品为宗旨,以“服务社会和人民群众需求,传播社会主义先进文化”为己任,产业结构不断完善,已由传统的图书出版向着图书、期刊、电子出版物、音像制品、电子商务一体化延伸,现已发展为多领域、多学科的大型综合性出版社,涉及机械、电工电子、汽车、计算机、经济管理、建筑、ELT、科普以及教材、教辅等领域。