前端函數式攻城指南

前端函數式攻城指南 下載 mobi epub pdf 電子書 2024


簡體網頁||繁體網頁
歐陽繼超 著



點擊這裡下載
    


想要找書就要到 圖書大百科
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!

發表於2024-12-22

類似圖書 點擊查看全場最低價

圖書介紹

齣版社: 電子工業齣版社
ISBN:9787121297243
版次:1
商品編碼:12040474
包裝:平裝
開本:16開
齣版時間:2016-09-01
用紙:膠版紙
頁數:192
字數:187000
正文語種:中文


相關圖書





圖書描述

産品特色

編輯推薦

適讀人群 :本書適閤想要瞭解函數式編程的JavaScript 程序員或者想學習JavaScript 的函數式程序員閱讀。

1、涵蓋大部分函數式編程思想

2、幽默風趣,通俗易懂

3、是Clojure風格的JavaScript

4、用JavaScript實現瞭很多奇技淫巧

5、所有開發者都可以在本書中找到一些啓發


內容簡介

在後端,函數式語言層齣不窮。在前端,函數式最後的邊界也已經被漸漸打破。Scala的Scala.js、Clojure的ClojureScript都試圖同構移嚮前端。然而,原生JavaScript其實也可以通過豐富的庫讓前端的函數式編程一樣的舒適和優雅。本書涵蓋瞭大部分函數式編程思想,包括JavaScript的函數式支持,Clojure風格的集閤、遞歸、函數組閤、宏、模式匹配、實用的Monads,以及前端的並發編程。本書適閤想要瞭解函數式編程的JavaScript程序員或者想學習JavaScript的函數式程序員閱讀。

作者簡介

歐陽繼超,ThoughtWorks高級谘詢師,活躍開源貢獻者(github.com/jcouyang),熱愛編程與寫作,譯有《函數式JavaScript》以及若乾開源書籍與文檔。

精彩書評

作為 Ramda.js 的作者之一,我非常喜歡 Braithwaite 的《JavaScript Allonge》,喜歡 Fogus 的《Functional JavaScript》,我非常激動又有一本關於JavaScript的函數式書籍,希望盡快能見到這本書的英文版。

—— CrossEye


目錄

第1章 函數式JavaScript 1
1.1 JavaScript也是函數式語言嗎 1
1.1.1 編程範式 1
1.1.2 JavaScript的函數式支持 3
1.2 作為函數式語言,JavaScript還差些什麼 10
1.2.1 不可變數據結構 11
1.2.2 惰性求值 11
1.2.3 函數組閤 12
1.2.4 尾遞歸優化 13
1.3 Underscore你錯瞭 14
1.3.1 跟大傢都不一樣的 map 函數 14
1.3.2 ClojureScript 16
1.3.3 Mori 17
1.4 小結 18
第2章 集閤 19
2.1 集閤的使用 20
2.1.1 嚮量(vector) 20
2.1.2 Map 23
2.1.3 函數組閤子 24
2.2 持久性數據結構 27
2.2.1 嚮量的持久性數據結構 28
2.2.2 最後一片葉子不完整 31
2.2.3 所有葉子完整且葉子個數不大於完全樹的葉子個數 32
2.2.4 所有葉子完整且葉子個數大於完全樹的葉子個數 34
2.3 不可變性 35
2.3.1 緻命魔術 36
2.3.2 引用透明性 38
2.3.3 函數式React 40
2.3.4 綫程不安全 42
2.4 惰性序列 44
2.4.1 改良奧利奧吃法 44
2.4.2 惰性求值與及早求值 46
2.4.3 惰性求值的實現 48
2.5 小結 50
第3章 遞歸 51
3.1 不可變性與遞歸 51
3.1.1 真的需要循環嗎 52
3.1.2 遞歸還是循環 54
3.2 柯裏悖論 55
3.2.1 Y組閤子 57
3.2.2 棧是多麼容易爆 60
3.3 尾遞歸優化 62
3.4 蹦跳樂園(Trampoline) 64
3.4.1 有窮狀態機(DFA) 65
3.4.2 Trampoline 67
3.5 小結 69
第4章 函數組閤 70
4.1 Underscore到底做錯瞭什麼 70
4.1.1 自由(Free)變量與約束(Bound)變量 72
4.1.2 閉包 74
4.2 柯裏化有什麼用 75
4.3 Transducer 78
4.3.1 Reducer 79
4.3.2 來看看更好更快的解法 79
4.3.3 Reducer 80
4.3.4 Reducible 81
4.3.5 Transducer詳解 82
4.3.6 跟柯裏化有什麼區彆 83
4.4 組閤與管道 84
4.4.1 管道(Pipeline) 84
4.4.2 組閤與管道 86
4.4.3 管道函數 87
4.5 小結 87
第5章 Macro宏 89
5.1 什麼是REPL 89
5.1.1 宏擴展器(Macro Expander) 90
5.1.2 那麼前端怎麼辦 92
5.2 為什麼要語法糖 93
5.2.1 隻是為瞭語法漂亮嗎 94
5.3 Sweet.js 94
5.3.1 Rule Macro 95
5.3.2 Case Macro 97
5.4 Infix Macro 和 Operator 104
5.4.1 Infix Macro 104
5.4.2 自定義操作符 105
5.5 小結 106
第6章 模式匹配 107
6.1 Destructure 107
6.1.1 對象 109
6.1.2 數組 109
6.1.3 函數 109
6.2 Arity 函數 110
6.3 Fizz Buzz 111
6.3.1 字麵匹配(Literal Matching) 111
6.3.2 綁定 113
6.3.3 Vector與Map匹配 113
6.3.4 Guard 114
6.3.5 Sparkler 114
6.4 代數數據類型(ADT) 116
6.5 小結 118
第7章 Monadic編程 119
7.1 鏈式調用 119
7.1.1 Promise 120
7.1.2 高階Promise 122
7.2 Monad 123
7.2.1 函子(Functor) 123
7.2.2 Applicative Functor 126
7.2.3 含幺半群(Monoid) 130
7.2.4 Monad就是容器界的管道 132
7.2.5 Monad就是自函子範疇上的一個幺半群 136
7.3 走鋼絲 139
7.3.1 用Monad錶示薛定諤貓 139
7.3.2 皮爾斯走鋼絲 140
7.4 Monad在JavaScript中的應用 143
7.4.1 Promise版本的走鋼絲 144
7.4.2 When 144
7.5 Reactive編程 146
7.5.1 流(Stream) 146
7.5.2 Functor 147
7.5.3 Applicative 147
7.5.4 Monad 148
7.5.5 一個“簡單”的Reactive實例 149
7.6 小結 153
第8章 並發編程 154
8.1 什麼是並發 154
8.1.1 異步與多綫程 155
8.1.2 JavaScript的並發模型 157
8.2 通信順序進程(CSP) 160
8.3 使用Generator實現CSP 162
8.3.1 Generator 163
8.3.2 Go Block 163
8.3.3 timeout 164
8.3.4 take <! 165
8.3.5 put >! 165
8.3.6 JavaScript CSP版本的例子 166
8.4 實戰 CSP 168
8.4.1 使用移植的core.async 168
8.4.2 使用ES7中的異步函數 169
8.4.3 try catch 170
8.5 小結 173
參考資料 174

精彩書摘

4.2 柯裏化有什麼用

還記得上一章提到的提齣柯裏悖論的 Haskell Curry 嗎?這裏要說到的柯裏化中的 柯裏,完全不是巧閤,確實就是 Haskell Curry 的姓。藉助於利用他的名字命名的語言 Haskell,可以更好地理解柯裏化。

在 Haskell 語言中,函數是會自動柯裏化的:

max 3 4

其實就是:

(max 3) 4

可以看看 max 與 max 3 函數的類型:

ghci> :t max

max :: Ord a => a -> a -> a

看明白瞭嗎?Ord a => 錶示類型約束 a 為可以比較大小的類型,因此 max 的類型可以翻譯成:當給定一個 a,會得到 a -> a,即接收一個 a 類型,返迴一個 a 類型。接下來再看看 max 3 的類型就好理解瞭。

ghci> :t max 3

(Num a, Ord a) => a -> a

左側錶示類型約束 a 可以是 Ord 或者 Num,意思是 max 3 還是一個函數,如果給定一個 Ord 或者 Num 類型的參數,則返迴一個 Ord 或者 Num 類型。

現在是不是清晰瞭?在Haskell中,每給定一個參數,函數如果是多參數的,該函數還會返迴一個處理餘下參數的函數。這就是自動柯裏化。

而在 JavaScript(以及大多數語言) 中則不是這樣的,如果給定多參函數的部分參數,函數會默認其他參數是 undefined ,而不會返迴處理剩餘參數的函數。


反正最後都要計算齣值,那麼柯裏化和一次把所有約束添加上有什麼區彆呢?

再迴到上一節的例子,還記得我們要編寫一本能拿到所有男性姓名的操作手冊吧。我們把_.filter 硬是改寫成瞭柯裏化版本的Rfilter,終於可以組閤我們的操作手冊瞭:

const getMaleName = _.compose(

              data => _.map(data, d => d.name), // <1>

              Rfilter(d => d.sex == 'male')) // <2>

getMaleName(data)

(1)對於還沒有柯裏化的_.map就隻能說:提取數據的名字,這裏的數據等於傳入的數據。

(2)我可以明確地在手冊裏寫:過濾齣數據中性彆為男性的。

對比這兩行明顯可以看齣,第一行特彆囉唆,就是因為把本來應該是自由變量的data當約束變量給瞭_.map函數。相反,Rfilter並不需要data這個自由變量,意義卻完全一樣,這種方式又叫作“Pointfree”或者“Pointless”。

而且,當柯裏化_.filter函數之後,我們實際上得到的是兩個函數,而不隻是一個。給定一個約束後得到一個新的函數,這個函數就可以拿來組閤其他函數,或者再給定不同約束返迴不同給定值。

當可組閤的函數越多,就能夠越大程度地復用現有函數,組閤齣更多的函數。就像樂高積木,如果買一般的通用樂高,其實可以組閤齣各式各樣的形狀,但是一旦有些積木給瞭一些設定,比如你買瞭一盒辛普森一傢的樂高(圖4-1),就很難和生活大爆炸的樂高(圖4-2)組閤到一塊去,因為其中很多積木都添加瞭一些設定,設定越多,則離抽象越遠,離具體越近,也就越難復用。


前言/序言

  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)橫綫
  可以忽略的詞。



前端函數式攻城指南 下載 mobi epub pdf txt 電子書 格式

前端函數式攻城指南 mobi 下載 pdf 下載 pub 下載 txt 電子書 下載 2024

前端函數式攻城指南 下載 mobi pdf epub txt 電子書 格式 2024

前端函數式攻城指南 下載 mobi epub pdf 電子書
想要找書就要到 圖書大百科
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!

用戶評價

評分

在看的時候能夠感受到作者對這本書的,投入是比較用心的,值得錶揚

評分

等有空再來評價

評分

還可以吧,挺不錯的

評分

函數式讀起來賞心悅目

評分

可以的,質量不錯,還沒細看

評分

等有空再來評價

評分

被書名吸引的,買來看看

評分

和同學一起買的,很不錯的書? ?(?&macr;???&macr;???)?&rdquo;

評分

很不錯,學習啦,很不錯,學習啦,很不錯,學習啦,很不錯,學習啦,

類似圖書 點擊查看全場最低價

前端函數式攻城指南 mobi epub pdf txt 電子書 格式下載 2024


分享鏈接




相關圖書


本站所有內容均為互聯網搜索引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

友情鏈接

© 2024 book.qciss.net All Rights Reserved. 圖書大百科 版權所有