美文网首页ClojureClojure技术集合
Clojure 学习笔记 :0 零基础教程

Clojure 学习笔记 :0 零基础教程

作者: BlindingDark | 来源:发表于2016-05-17 02:02 被阅读2659次

    Clojure 零基础 学习笔记


    A language that doesn't affect the way you think about programming, is not worth knowing. --- Alan J. Perlis
    如果一门语言无法对你的编程思想造成影响,那么它不值得你去了解 --- Alan J. Perlis

    本文集使用 WTFPL 协议
    这意味着,欢迎各位随意的转载、修改,以及做一切你想要做的事儿。这正是我想看到的结果。
    但务必留一个指向这里的链接,以便读者获取到最新的内容。
    (不留的话也无所谓咯)

    本人也是一名初学者,水平极为有限。
    一方面作为学习笔记使用。
    另一方面希望能用最易为理解的语言来描述,让零编程基础的同学也能读懂。
    如有错误,欢迎直接在此回复、交流、指正。
    我需要你们的反馈,以提高这个系列严谨性与可读性,使之能为更多人提供更好的服务!

    本系列文章的内容可能随时改动,以优化阅读体验,具体改动内容恕不另行说明。
    也许再读的时候会发现变化很大了呢。

    如果文中出现了一些非常难以理解的晦涩词句,在仔细思考后仍无法理解,那一定是我的表述存在问题。请直接在文章下方留言,我会详细地解释。再次感谢你的交流与意见。


    • 絮叨
      在阅读本文之前,你可能已经学习过其它程序设计语言
      Clojure 也许与你接触过的语言有很大的不同
      无论如何,请忘记它们

    • 为什么选择 Clojure
      传奇语言 Lisp 的一门方言 ,简洁而优雅[1]
      可以方便地与 Java 进行交互:
      Clojure 运行于 JVM[2] 之上[3],这表示你可以直接使用庞大丰富的 Java 库,而 Java 程序也可以反过来调用 Clojure 代码。使得你在 Java 平台上投入的精力不被浪费。

    • Clojure 能做什么
      虽然理论上来说,任何一个完备的程序设计语言,在功能上都是相等的[4]
      也就是说,A 语言可以做到的事情 B 语言一样可以做到。
      但是每一种语言是有自己擅长的领域的,
      语言的特性决定了其领域。
      C / C++ 就比较适合开发一些对效率要求很高的东西。(比如图形引擎,操作系统)
      而 Java 则适合用来做后台服务器。(或者写一个 Android 程序,感谢 Android 实现了 Java ME [5]未竟之事)
      Clojure 则借助于 Lisp 得天独厚的优势,提供了解决复杂问题的优雅解决途径:

      • 使用函数式编程,来大大简化你的程序,提高开发效率。
      • 通过宏这种强大的工具,使得你可以编写属于你自己的领域特定语言。(DSL[6]
      • 同时由于她的不可变特性,以及提供了一些处理多线程的操作,在处理并发时 Clojure 也能显露优势。

      我们并不指望你可以一下子感受到语言之间的异同,
      但是大概的意思是想让你明白,Clojure 作为一门 Lisp 方言,以强大的表达能力著称, 使之能以更优雅的方式来解决问题。
      并不是在贬低其它语言不够优雅,而是这是事实。(雾)(说完就被打了)
      在今后的学习中,你会逐渐感受到这种优势带给你的便捷。

    • 为什么 Clojure / Lisp 没有流行
      流行只代表着它的使用者很多,与它本身的优秀与否不存在简单的关联。

      流行很大程度上与历史情况有关,在 Lisp 刚刚诞生的时候,计算机的运行速度很慢,这导致使用垃圾自动回收、动态特性的 Lisp 的运行速度非常缓慢。

      在其之后的诞生的语言 --- 如C,其运行速度和其易用性的平衡,在当时的计算机上达 到了一个相当高的水平,从而成为了一种真正实用的程序设计语言。
      而流行这种东西类似“滚雪球”,使用者越滚越多,一旦确立其地位就很难被取代。
      原因可能是你的老板认为,招收使用人数较多的程序员更保险一些,
      或者随大流的使用别人使用的技术。

      Java 的流行则得益于成功的商业运作(以及借用了一大堆 Lisp 系统的技巧和特性,还简化了 C++ 里一些晦涩的用法),虽然在当时 Java 的速度还远比不上 C 或者 C++。

      随着计算机运行速度的提高,动态语言的执行速度已经可以接受,
      于是一批表达能力更强的语言诞生了(如Python,Ruby,JavaScript),
      牺牲了少许在可接受范围内的性能,而得到了更为自然流畅的编程体验,这些语言自然受到了程序员的欢迎。要知道程序员(可能)是地球上最懒的一群人。

      而 Lisp 无论从思想上,还是形式上,都是程序语言界的奇葩。这导致了程序员在其它设计语言上投入的精力,无法直接帮助他们学习 Lisp 语言,从而大大的提高了 Lisp 语言的学习成本。(好吧,我承认你在其它函数式语言上的投入也许会帮助你)
      由于刚才我们说过,程序员(可能)是地球上最懒的一群人,所以 Lisp 的流行障碍就非常之大了。(但事实上,了解 Lisp 思想对使用其它语言的程序员来说也有益处。)

      Clojure 作为一门 Lisp 方言,上述讨论同样适用。

    • 如何部署 Clojure 运行环境
      最“傻瓜式”的方式是下载安装 Eclipse 或者 IDEA 之类的集成开发环境
      然后再安装对应的插件
      这样就可以一次性获得到一整套环境
      Eclipse 插件 Counterclockwise
      IDEA 插件 Cursive

      如果你觉得 IDE 过于笨重,或者现在只是想简单的体验一把,不想做复杂的安装,那么你只需下载一个仅有几 MB 大小的 jar 包,执行一行指令,便可在命令行使用 Clojure。
      具体做法点击查看《几分钟快速上手运行 Clojure》

      你还可以下载这款 Android 应用,无需任何配置,仅需下载安装,即可随时随地使用手机来体验 Clojure。
      点击这里获得这个应用在 Google 应用商店的地址。
      由于众所周知的原因我搬运了这个应用。
      http://pan.baidu.com/s/1o7Wh8TG

    • 如何运行 Clojure 程序
      【施工中】
      Clojure 与 其它 Lisp 方言一样,提供了一个称之为 REPL 的环境
      即 Read-Eval-Print Loop --- “读取-求值-输出” 循环

      读取:读取一段输入的代码
      求值:求取这段代码的值
      输出:显示出这个值
      循环:继续等待下一段代码的输入

      它是一个交互式的执行环境,使得你编写出一段 Clojure 代码之后,即可立即执行它!
      而无需等到全部代码编写完毕之后运行

      Clojure 程序是由一句一句的表达式构成的
      你可以把一系列表达式写在文件里,在你需要的时候一次性执行完毕
      也可以一句一句的输入进 REPL 里执行
      不用担心一句一句解释执行的效率不如一次性执行,两者的执行效率是相同的

    • 文档
      你可以访问 http://clojuredocs.org/ 查阅 API 的小例子
      也可以访问官方网站 http://clojure.github.io/clojure/ 来直接查阅官方 API 说明
      英文苦手们可以访问官方 API 文档翻译项目
      http://clojure-api-cn.readthedocs.io/en/latest/


    1. Lisp 黑客精神可以用两句话来概括:编程应该是有趣的。程序应该是优美的。(摘自ANSI Common Lisp 中文版

    2. Java Virtual Machine,即 Java 虚拟机。简单来说就是运行在真实操作系统上的又一层操作系统。程序不直接在系统上运行,而是在虚拟的系统上运行,以此来实现跨平台。(想想电影 黑客帝国 中的场景)

    3. 也同时存在运行在其它平台上的 Clojure 版本,如 ClojureScript 是一个可以把 Clojure 代码编译成 JavaScript 可执行的编译器。Clojure CLR 是一个运行在 DLR 平台上的版本

    4. 准确来说是“图灵等价”的。图灵等价的详细意义请点击这里查阅。

    5. Java Platform, Micro Edition. 即 Java 精简版。被设计用于小型设备的 Java 环境。

    6. 领域特定语言(domain-specific languages,简称DSL),简单来说就是你可以自己设计一套语法,以适应你需要处理的问题。

    相关文章

      网友评论

        本文标题:Clojure 学习笔记 :0 零基础教程

        本文链接:https://www.haomeiwen.com/subject/kbabrttx.html