前端函數式攻城指南( 簡體 字) | |
作者:歐陽繼超 | 類別:1. -> 程式設計 -> 網路編程 -> Javascript |
出版社:電子工業出版社 | 3dWoo書號: 45195 詢問書籍請說出此書號! 有庫存 NT售價: 295 元 |
出版日:9/1/2016 | |
頁數:192 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787121297243 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第1章 函數式JavaScript 1 在后端,函數式語言層出不窮。在前端,函數式最后的邊界也已經被漸漸打破。Scala的Scala.js、Clojure的ClojureScript都試圖同構移向前端。然而,原生JavaScript其實也可以通過豐富的庫讓前端的函數式編程一樣的舒適和優雅。本書涵蓋了大部分函數式編程思想,包括JavaScript的函數式支持,Clojure風格的集合、遞歸、函數組合、宏、模式匹配、實用的Monads,以及前端的并發編程。本書適合想要了解函數式編程的JavaScript程序員或者想學習JavaScript的函數式程序員閱讀。
序
函數式編程可以說是非常古老的編程方式,但是近年來函數式編程越來越受到人們的關注。不管是Google力推的Go、學術派的Scala與Haskell,還是Lisp的新方言Clojure,這些新的函數式編程語言都越來越受到人們的關注。 當然不僅是后端函數式編程語言層出不窮,前端也不甘示弱。雖然前端瀏覽器只支持一門語言——JavaScript,但是能支持函數式編程的JavaScript庫越來越多,比如Functional JavaScript 、Underscore、lodash等。不僅如此,還有一些能編譯成JavaScript的語言,能讓前端的函數式編程發揮到極致,例如Haskell的PureScript、Scala的Scalajs、Clojure的ClojureScript。 我兩次都以Clojure結尾,是因為我喜歡把重點留到最后。Clojure獨特于其他語言,它既是一門新的語言、一門函數式編程范式的語言,又流淌著古老的血液——Lisp 。這是我選擇用Clojure來詮釋函數式編程的原因之一。 那么為什么我要選JavaScript作為函數式編程的目標呢?Michael Fogus用200多頁向大家展示了不一樣的Functional JavaScript編程方式,可惜Fogus作為ClojureScript編譯器的貢獻者,竟然選擇了Underscore作為函數式庫,直接導致并不能完全展示JavaScript所能達到的函數式編程能力。有趣的是,ClojureScript的作者把ClojureScript的不可變(Immutable)數據結構移植到了JavaScript,這徹底將 JavaScript 的函數式編程提升到了用其他庫都完成不了的新高度 。不僅如此,Mozilla的Sweet.js(https://github.com/mozilla/sweet.js)更是完成了另一個突破——JavaScript的macro,它雖然不能算是函數式的概念,但也算是Lisp語言的一項獨門絕技了 。 這一切的一切,都讓我忍不住要幫Fogus出一本續集,用JavaScript實現其他函數式編程語言如Clojure甚至是Haskell 的奇技淫巧,讓大家進一步感受用JavaScript這門不完美的語言同樣可以編寫出優雅的函數式代碼,以不一樣的方式思考和解決問題。于是不管你是想轉行JavaScript的Clojure開發者,還是想了解Clojure或函數式編程的JavaScript開發者,都可以在此找到一些啟發。但這并不是一本JavaScript入門的好書 。 前言 1.看本書之前你要知道 1)最好能看懂JavaScript代碼 這既不是一本介紹Clojure的書,也不是一本介紹JavaScript的書,而是一本介紹如何用JavaScript函數式編程的書。其中一些函數式的思想和表現形式都借用了Clojure,因此叫作Clojure 風格的函數式JavaScript,但是并不要求在讀本書前會Clojure ,而只需要能閱讀JavaScript代碼。如果你會Clojure,則可以完全忽略我解釋Clojure代碼的段落,當然JavaScript的部分才是重點。 2)你可能買錯書了,如果你 ? 想學JavaScript 這不是一本JavaScript的教科書,這里只會介紹如何用JavaScript進行函數式編程,所以如果想要系統地學習JavaScript,則學習《JavaScript語言精粹》可能已經足夠了。另外,如果讀者的英文水平好的話,則還有一本可以在線免費閱讀的JavaScript Allonge。 ? 想學Clojure 同樣,這也不是一本Clojure的教科書,只含有一些用于闡述函數式編程思想的Clojure代碼。你確實可以學到一些Clojure編程知識,但很可能是非常零碎且不完整的知識。如果想要系統地了解和學習Clojure,則非常推薦你閱讀The Joy of Clojure ,另外,如果讀者英文比較好,還有一本可以免費在線閱讀的CLOJURE for the BRAVE and TRUE也非常不錯。 ? 是函數式編程的專家 如果你已經在日常工作或學習中使用Scala、Clojure或者Haskell等函數式語言編程的話,那么本書對你在函數式編程上的幫助不會太大。不過:這本書對緩解你從函數式語言遷移到JavaScript編程的不適應該是非常有效的。這也正是本書的目的之一。 2.準備環境 在開始閱讀本書之前,如果你希望能運行書中的代碼,可能需要一些環境的配置。而且書中的所有源碼和運行方式都可以在本書的Github倉庫 中找到。當然如果你使用Emacs(同時還配置了org babel的話)閱讀本書的源碼,對于大部分代碼只需要光標放在代碼處按c-c c-c即可。 ? JavaScript 原生的JavaScript沒有什么好準備的,可以通過Node或者Firefox(推薦)的Console運行代碼。當然第5章會有一些使用Sweet.js寫的Macro,這則需要安裝Sweet.js。 – 安裝Node/io.js (1)下載Node.js。 (2)如果使用Mac,可以直接用Brew安裝。 brew install node # 或者 brew install iojs – 安裝Sweet.js 在安裝完Node.js之后在命令行輸入: npm install -g sweet.js ? Clojure 書中的Clojure代碼大都用來描述函數式編程的概念,當然如果想要運行書中的 Clojure 代碼,首先需要安裝JVM或者JDK ,至少需要1.6版本,推薦安裝1.8版本。 – 安裝 leiningen leiningen是Clojure的包管理工具,類似于Node的Npm、Ruby的bundle、Python的pip。另外leiningen還提供腳手架的功能。可以通過官網的腳本安裝 。Mac用戶可以簡單地使用brew install leiningen安裝。 安裝完成之后,就可以運行lein repl,打開repl,試試輸入下列Clojure代碼,你將會立馬看見結果。 (+ 1 1) ;=> 2 – 編輯器 如果更喜歡使用編輯器來編輯更長的一段代碼,我推薦非Emacs用戶使用Light Table ,Intellij用戶則使用cursive 。當然如果讀者已經在使用Emacs,那就更完美了,Emacs cider mode 是Clojure編程不錯的選擇。 3.本書中的代碼 書中的所有源碼和運行方式都可以在本書的Github倉庫 中找到,書中幾乎所有的例子都以測試的形式完成。 4.反饋 如果你是開源貢獻者,那么應該很習慣通過Github Issue9提交任何反饋,如果是Pull Request,那就更好了。當然如果沒有使用過Github Issue也沒有關系,這里 有非常詳細的教程。 5.代碼風格約定 本書的JavaScript代碼都遵循Airbnb JavaScript Style Guide 中的ES5和React的風格約定。 6.本書的組織結構 第1章 將介紹JavaScript的基本函數式背景,簡要地介紹為什么要關心函數式編程,為什么說Underscore不夠函數式,JavaScript要作為完整的函數式語言還缺些什么? 第2章 主要介紹Clojure的集合數據結構。這是個無聊但是又很重要的章節,可以說函數式編程最基本、最重要的就是集合操作。本章會涉及如何操作集合、惰性求值與惰性序列。 第3章 在了解了持久性數據結構后,我們可能會產生疑惑,如果數據結構都是不可變的,那么循環該怎么寫呢?本章就是要解開各種使用不可變數據結構的疑惑,用這些不可變數據結構可以切換一種編程的思維方式。 第4章 Underscore并不利于函數組合,但是函數組合其實是函數式編程最重要的思想。在這一章里面,我會詳細介紹為什么說Underscore錯了,而為什么要喜歡上柯里化,以及Clojure 1.7新推出的Transducer又是如何幫助我們更容易組合出更高效的函數的。 第5章 我特別不情愿把Macro翻譯成宏。宏特別容易讓人以為是 C 語言里面那個#define宏,雖然都是宏,但其實那里跟這里說的Macro不是一個級別的。Macro是Lisp語言之所以特別的原因之一。本章我們就來看看到底什么是、為什么,以及如何在JavaScript中使用Macro。 第6章 這里說的模式匹配包括兩種:一種是按位置或者key匹配集合,取出相應數據。另一種是Haskell風格的對函數參數的模式匹配。本章篇幅比較小,因為模式匹配并不是Clojure(也不是JavaScript)的主要模式,盡管在一些有強大類型系統的函數式語言(Scala、Haskell)中比較重要。 第7章 Monad這個范疇論里出來的神秘玩意,但你可能沒有在意,其實這在前端世界早都被玩膩了。本章將會介紹Monad和它的朋友們,并且將帶你體驗JavaScript的Promise,以及Reactive編程。 第8章 并發編程一直是令人頭疼的編程方式,直到Clojure和Go的出現,徹底改變了我們并發編程的方式。而對于單線程的JavaScript,基于事件循環的并發模型也一直困擾著我們,到底能從Clojure學些什么,可以使我們的前端并發編程之路更順暢一些呢?本章將帶你熟悉并發、JavaScript的并發模型,以及CSP并發模型。 7.本書使用的約定 本書使用以下字體排版約定。 1)楷體 表示新的術語。 2)等寬字體 代碼清單,出現在段落之內則表示變量、函數名、關鍵字等。 3)粗體 重點概念。 4)下畫線 需要填入的詞,我可能已經幫大家填上了。 5)橫線 可以忽略的詞。 |