简介

在你的内心深处,你一直都知道你注定要学习 Clojure。 每当你高举着键盘,为一个难以理解的类层次结构而痛苦地哭泣时;每当你晚上躺在床上,为一个突变引起的海森堡虫而哭泣扰乱你的亲人时;每当一个竞赛条件使你拔掉更多你不断减少的头发时,你的某个秘密部分已经知道一定有一个更好的办法

现在,终于,你面前的教学材料将使你与你渴望已久的编程语言结合起来。

学习一种新的编程语言:穿越四个迷宫的旅程

为了最大限度地发挥 Clojure 的作用,你需要在每个学习新语言的程序员面临的四个迷宫中找到自己的路。

  • 工具之林 友好而高效的编程环境使你能够轻松地尝试你的想法。你将学习如何设置你的环境。

  • 语言之山 随着你的攀登,你将获得 Clojure 的语法、语义和数据结构方面的知识。你将学习如何使用最强大的编程工具之一--宏,并学习如何利用 Clojure 的并发结构来简化你的生活。

  • 神器之洞 在它的深处,你将学会构建、运行和发布你自己的程序,以及如何使用代码库。你还将学习 Clojure 与 Java 虚拟机(JVM)的关系。

  • 心态云堡 在其稀薄的空气中,你将了解 Lisp 和函数式编程的原因和方法。你将了解渗透在 Clojure 中的简单哲学,以及如何像 Clojurist 一样解决问题。

别搞错了,你要工作。但这本书会让你感觉到工作是令人振奋的,而不是疲惫的。这是因为本书遵循三个准则。

  • 它采取了甜点优先的方法,给你提供了你需要的开发工具和语言细节,以便立即开始玩真正的程序。

  • 它假定你对 JVM、函数式编程或 Lisp 没有经验。它详细地涵盖了这些主题,所以当你构建和运行 Clojure 程序时,你会对你正在做的事情感到自信。

  • 它避开了 真实世界 的例子,而选择了更有趣的练习,如 攻击霍比特人追踪闪亮的吸血鬼

到最后,你将能够使用 Clojure--现存的最令人兴奋和最有趣的编程语言之一!

本书是如何组织的

本书分为三个部分,以便更好地指导你完成你的勇敢探索,勇敢的初出茅庐的 Clojurist。

第一部分:环境设置

为了保持动力和高效学习,你需要实际写代码和构建可执行文件。这些章节将带领你快速浏览你所需要的工具,以便轻松地编写程序。这样,你就可以专注于学习 Clojure,而不是摆弄你的环境。

第 1 章:构建、运行和 REPL

让一个真正的程序运行起来,有一种强大的激励作用。一旦你能做到这一点,你就可以自由地进行实验,而且你可以真正地分享你的工作

在这短短的一章中,你将投入少量时间来熟悉建立和运行 Clojure 程序的快速方法。你将学习如何在一个正在运行的 Clojure 进程中使用 read-eval-print 循环(REPL)来实验代码。这将收紧你的反馈回路,帮助你更有效地学习。

第二章:如何使用 Emacs,一个优秀的 Clojure 编辑器

快速的反馈回路对学习至关重要。在这一章中,我从头开始介绍 Emacs,以保证你有一个高效的 Emacs/Clojure 工作流程。

第二部分:语言基础

这些章节为你继续学习 Clojure 奠定了坚实的基础。你将从学习 Clojure 的基础知识(语法、语义和数据结构)开始,这样你就可以做事情。然后,你将退一步详细研究 Clojure 最常用的函数,并学习如何使用函数式编程*的思维方式来解决这些问题。

第三章:做事情:Clojure 速成班

在这里,你将开始真正深入了解 Clojure。这也是你需要关闭窗户的地方,因为你会开始大喊:"HOLY MOLEY THAT'S SPIFFY!",而且直到你读完本书的索引才会停止。

毫无疑问,你已经听说过 Clojure 令人敬畏的并发支持和其他了不起的功能,但 Clojure 最突出的特点是它是一种 Lisp。你将探索这个 Lisp 核心,它由两部分组成:函数和数据。

第 4 章:深入探讨核心函数

在这一章中,你将了解 Clojure 的几个基本概念。这将为你提供所需的基础,使你能够阅读你以前没有使用过的函数的文档,并理解当你尝试它们时发生了什么。

你还会看到你最需要的函数的使用例子。这将为你编写自己的代码以及阅读和学习其他人的项目打下坚实的基础。还记得我是如何提到追踪闪闪发光的吸血鬼的吗?你会在这一章中做到这一点(除非你已经在业余时间做到了)。

第五章:函数式编程

在这一章中,你将把你在函数和数据结构方面的具体经验与一种新的思维方式结合起来:函数式编程思维方式。你将通过构建席卷全国的最热门的新游戏来炫耀你的知识。Peg Thing!

第 6 章:组织你的项目:一个图书管理员的故事

本章解释了什么是命名空间,以及如何使用它们来组织你的代码。我不想透露太多,但它也涉及到一个国际奶酪大盗。

第 7 章:Clojure 炼金术:读取、求值和宏

在这一章中,我们将退一步描述 Clojure 如何运行你的代码。这将给你一个概念性的结构,你需要真正理解 Clojure 是如何工作的,以及它与其他非 Lisp 语言有什么不同。有了这个结构,我将介绍宏,这是现有的最强大的工具之一。

第 8 章:编写宏

这一章彻底研究了如何编写宏,从基本的例子开始,并在复杂程度上有所提高。最后,你将戴上你的假想帽,假装你经营一家网上药水店,并使用宏来验证客户的订单。

第三部分:高级主题

这些章节涵盖了 Clojure 的额外有趣的主题:并发、Java 互操作和抽象。尽管你可以在不了解这些工具和概念的情况下编写程序,但它们在智力上是有价值的,并能给你作为一个程序员带来巨大的力量。人们说学习 Clojure 会让你成为一个更好的程序员,原因之一就是它让这些章节中涉及的概念变得易于理解和实际使用。

第 9 章:并发和并行编程的神圣艺术

在这一章中,你将了解什么是并发和并行,以及它们为什么重要。你将了解在编写并行程序时面临的挑战,以及 Clojure 的设计如何帮助缓解这些挑战。你将使用期货、延迟和承诺来安全地编写并行程序。

第 10 章:Clojure 形而上学:原子、Refs、Vars 和拥抱僵尸

本章详细介绍了 Clojure 管理状态的方法以及如何简化并发编程。你将学习如何使用原子、参考数和变量这三种管理状态的结构,并学习如何用pmap进行无状态的并行计算。还会有抱抱的僵尸。

第 11 章:用 core.async 掌握并发

在这一章中,你将思考宇宙中的一切是一台热狗售卖机的想法。我的意思是,你将学习如何为独立运行的进程系统建模,这些进程通过使用 core.async 库的通道相互通信。

第 12 章:与 JVM 一起工作

这一章就像一本短语书和 Java 大陆的文化介绍之间的交叉。它向你概述了什么是 JVM,它如何运行程序,以及如何为它编译程序。它还向你简要介绍了常用的 Java 类和方法,并解释了如何在 Clojure 中与它们进行交互。不仅如此,它还向你展示了如何思考和理解 Java,以便你能将任何 Java 库纳入你的 Clojure 程序中。

第 13 章:用多重方法、协议和记录创建和扩展抽象概念

在第 4 章中,你了解到 Clojure 是以抽象的方式编写的。本章是对创建和实现你自己的抽象的世界的介绍。你将学习多重方法、协议和记录的基础知识。

附录 A:用 Leiningen 构建和开发

本附录阐明了使用 Leiningen 的一些细微之处,比如什么是 Maven,如何计算出 Java 库的版本号,以便你能使用它们。

附录 B:Boot,花哨的 Clojure 构建框架

Boot 是 Leiningen 的一个替代品,它提供了相同的功能,但有一个额外的好处,即它更容易扩展和编写可组合的任务。本附录解释了 Boot 的基本概念,并指导你编写你的第一个任务。

代码

你可以在*http://www.nostarch.com/clojure/*下载该书的所有源代码。这些代码是按章节组织的。

第 1 章描述了运行 Clojure 代码的不同方式,包括如何使用 REPL。我建议当你遇到大多数例子时,在 REPL 中运行它们,特别是第 3 章到第 8 章。这将有助于你习惯于编写和理解 Lisp 代码,并能帮助你保留你所学的一切。但是对于那些很长的例子,最好把你的代码写到一个文件中,然后在 REPL 中运行你写的代码。

旅程开始了

你准备好了吗,勇敢的读者?你准备好迎接你真正的命运了吗?带上你最好的一对小括号:你即将踏上一生的旅程!

Last updated