Clojure一瞥
Clojure是一种动态、通用的程序设计语言,既有脚本语言易于学习和交互开发的特点,又具备适合多线程编程的高效和强健的基础架构。虽然Clojure属于编译语言,却是完全动态的,所有特性都能在运行时得到支持。借助可选的类型提示和类型接口,Clojure可以方便地访问Java框架,确保在调用时不会出现Java反射。
Clojure是一种Lisp方言,继承了Lisp“代码即数据”的设计理念以及功能强大的宏系统。总体而言,Clojure属于函数式编程语言,包括丰富的不可变和可持久化数据结构。当需要处理可变状态时,Clojure通过软件事务内存与响应式Agent系统,确保实现清晰、正确、多线程的设计。
——Rich Hickey,Clojure作者
上述介绍来自Clojure的作者Rich Hickey,点出了这门语言的本质。许多人将Clojure等同于函数式编程,不过与其前身Lisp类似,Clojure实际是一门通用语言,能支持任何编程范式。
然而,Clojure的确具有浓郁的函数式特点。它侧重于不可变值和可持久化数据结构,为函数式编程提供有力支持。读者或许对Clojure也能用于面向对象编程表示惊讶,本书将对此进行讨论。
目标读者
本书是为有经验的程序员准备的。读者应掌握至少一门编程语言,并了解Clojure的基本语法和概念,做好在更高层次上运用Clojure的准备。本书旨在实现读者从Clojure初学者向Clojure开发者的蜕变。学习Clojure不仅涉及全新的语法,所用的工具和构造可能与读者之前的体验大相径庭。
程序源代码
读者可以从Wiley网站www.wiley.com/go/professionalclojure下载源代码,也可以访问GitHub上的Clojure项目:https://github.com/backstopmedia/clojurebook。
一门功能强大的程序设计语言不仅可以引导计算机执行既定的任务,也是一个能体现开发人员进程思路的框架。
——《计算机程序的构造和解释》(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集成、语法高亮、代码缩进等基本功能,应考虑换用以下编辑器。
Emacs
Emacs为众多资深程序员所青睐,它与Lisp的历史一样悠久。尽管上手不易,但Emacs被广泛认为是一种功能极强大的编辑器,其可扩展性无出其右。目前有许多有助于改善学习难度的自定义Emacs配置,如Emacs Prelude 。后者合理的默认配置,可以用于包括Clojure在内的多种语言的开发。
LightTable
LightTable 最初是Kickstarter 上的一个项目,现已发展为一个集代码编辑器、REPL、文档浏览器于一身的IDE。LightTable功能强大,目前在Clojure社区备受推崇。
Cursive (IntelliJ)
如果读者熟悉某种JetBrains IDE的使用,会很高兴看到这款名为Cursive的IntelliJ插件 。Cursive不仅能很好地与nREPL进行集成,也提供强大的重构支持,以及调试和Java互操作性等功能。
Counterclockwise (Eclipse)
熟悉Eclipse的读者可以考虑使用Counterclockwise ,后者既是一款Eclipse插件,也可以作为一个独立的编辑器使用。Counterclockwise具备与上述几种编辑器相同的特性,以及REPL集成、内联代码评估等功能。
本书约定
为帮助读者在阅读本书的过程中获取最多信息,并随时了解当前处理的事项,本书使用了许多约定。
注意:
列出注释、提示、暗示、技巧或对当前讨论的弦外之音。
本书通过两种方式来显示代码:
● 对于大多数代码示例,使用没有突出显示的等宽字体来表示。
● 对在当前上下文中特别重要的代码,用粗体字来强调显示。
勘误表
尽管我们已经尽了各种努力来保证文章或代码中不出现错误,但是错误总是难免的,如果你在本书中找到了错误,例如拼写错误或代码错误,请告诉我们,我们将非常感激。通过勘误表,可以让其他读者避免受挫,当然,这还有助于提供更高质量的信息。
请给wkservice@vip.163.com发电子邮件,我们就会检查你的反馈信息,如果是正确的,我们将在本书的后续版本中采用。
要在网站上找到本书英文版的勘误表,可以登录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图书的所有代码。