發表於2024-11-23
學習函數式編程的入門好書
用一種更優雅、更高效的方式開發高性能的並發軟件
《Elixir 程序設計》作者就是15 年前編寫瞭Programming Ruby,將Ruby 帶入大眾視野的Dave Thomas。這一次他延續瞭一貫的寫作風格,以一個擁有麵嚮對象的開發經曆但並未接觸過函數式編程的開發者的角度切入,循序漸進地帶領讀者進入 Elixir 的奇妙世界。通過一步步的實驗探索,引導讀者逐步跳齣已有的編程思維模式,以全新的函數式編程方式來思考及尋找解決實際問題的辦法。然而本書並不像Programming Ruby 那樣麵麵俱到,而是給讀者講述基本的Elixir 語法和編程思想,同時提供許多有用的資源,啓發讀者繼續深入探索。這也是學習一門新語言的樂趣所在。
如果你對函數式編程有興趣,或者你正在苦苦尋求一種高效的並發編程的方法,Elixir 可以作為入門之選,值得一試。
Dave Thomas 再一次做到瞭:《Elixir 程序設計》成為瞭每本編程書籍都渴望與之比肩的目標。它不是簡單地教授語法和舉幾個刻闆的例子,而是引導你如何以Elixir 的方式思考。
——Bruce Tate
icanmakeitbetter.com公司CTO,技術作傢
在《Elixir 程序設計》裏,David 齣色地介紹瞭函數式編程,他以一種有趣、實用、充滿靈感的方式教我們重新思考如何用不同的方法來設計程序。隨著閱讀的深入,你會不時會心一笑,因為你發現 Elixir 的某方麵可以讓你用一種新的、更優雅的方式來解決問題,而且這種方式非常自然和直觀,我們這些編程人員必須馬上應用起來纔行。
這本書詳細地介紹瞭 Elixir 及其工具,旨在使開發過程更加流暢和富有成效。Dave 解釋瞭 Erlang 運行時係統的核心部件,如分布式、並發和容錯,它們為 Elixir 提供瞭編寫可擴展、適應性強的應用程序的能力。
——Alexei Sholik
順序編程的時代已經過去,如今高性能、可擴展和容錯的軟件都是並發的。Elixir 是這個全新世界裏的關鍵角色,它將 Erlang 和 OTP 的能力帶給更廣泛的受眾。閱讀本書吧,為迎接軟件開發新時代開個好頭。
——Paul Butcher
《七周七並發模型》的作者
就像鎬頭書之於 Ruby,這本書是 Elixir 的事實標準。Dave 以他無可挑剔的風格,全麵介紹瞭Elixir 語言的各方麵,包括數據結構、宏、OTP,甚至 Dialyzer。閱讀本書是一種享受,因為它帶領讀者學習 Elixir,並帶領他們參與編寫函數式程序的整個思維過程。
如果你想快速掌握 Elixir 語言,《Elixir 程序設計》是你的優先選擇。
——Jim Freeze
首屆世界Elixir 會議的組織者
這無疑將成為 Elixir 的鎬頭書。……Dave 很興奮地帶領讀者進入迷人的 Elixir 世界。對於對 Elixir 感興趣的每一位程序員而言,本書值得擁有。
——Dan Kozlowski
《Elixir 程序設計》是Dave Thomas 的另一佳作。在此之前我嘗試的幾個函數式編程語言都讓我備受挫摺。你能感覺到Dave 的熱情和在每一章節使用該語言時的喜悅。他會讓你以從未想到過的方式來思考解決問題的辦法。這本書讓我徹底改變瞭在思考各種語言編程的改進時的方式。
——Richard Bishop
我真的很享受閱讀這本書。它不隻是一股腦兒地介紹一些語法或特性;總的來說,我認為它對 Elixir 和函數式編程做瞭非常周到的介紹。
——Cody Russe
第1 章 接受現實 1
編程時應該關注數據轉換 1
藉助管道來組閤轉換 2
函數是數據轉換器 3
安裝 Elixir 3
運行 Elixir 4
iex—交互式 Elixir 4
編譯和運行 8
對閱讀本書的建議 9
練習 9
換一種方式思考 10
第一部分 常規編程
第2 章 模式匹配 12
賦值:並非如你所料 12
更復雜的匹配 13
輪到你瞭15
用_(下畫綫)忽略匹配值 15
每次匹配變量僅綁定一次 15
輪到你瞭17
從另一個角度來看等號 17
第3 章 不可變性 18
你已經擁有瞭(一些)不可變數據 18
不可變的數據纔是已知的 19
不可變性對性能的影響 20
復製數據20
垃圾迴收20
用不可變數據編寫程序 21
第4 章 Elixir 基礎 22
內置類型 22
值類型 23
整數 23
浮點數 23
原子 24
區間 24
正則錶達式 24
係統類型 25
PID 和端口 25
引用 25
收集類型 26
元組 26
列錶 27
散列錶 28
二進製型29
命名、源文件、約定、運算符和其他 30
真值 30
運算符 31
小結 32
第5 章 匿名函數 33
函數和模式匹配 34
輪到你瞭35
一個函數,多個函數體 35
編寫更長的代碼 36
輪到你瞭37
能返迴函數的函數 37
記住原始環境的函數 38
參數化函數 39
輪到你瞭39
將函數作為參數來傳遞 40
& 運算符 40
輪到你瞭42
函數是核心 42
第6 章 模塊與命名函數 43
編譯模塊 43
函數體是代碼塊 44
輪到你瞭45
函數調用與模式匹配 45
輪到你瞭48
哨兵子句 48
哨兵子句的限製 49
默認參數 50
輪到你瞭53
私有函數 53
|> ——美妙的管道運算符 54
模塊 55
模塊指令57
import 指令 57
alias 指令 58
require 指令 58
模塊屬性 58
模塊名:Elixir、Erlang 和原子類型 59
調用 Erlang 的庫函數 60
尋找函數庫 60
輪到你瞭61
第7 章 列錶與遞歸 62
頭部和尾部 62
使用頭部和尾部來處理列錶 63
iex 如何顯示列錶 64
使用頭部和尾部來構造列錶 66
創建映射函數 67
在遞歸過程中跟蹤值 68
輪到你瞭69
生成求和函數 69
輪到你瞭70
更復雜的列錶模式 71
列錶的列錶 71
輪到你瞭74
List 模塊實戰 75
與列錶友好相處 76
第8 章 字典:散列錶、散列字典、關鍵字列錶、集閤與結構體 77
如何在散列錶、散列字典和關鍵字列錶之間做選擇 77
字典 78
模式匹配和更新散列錶 79
模式匹配不能綁定鍵 81
更新散列錶 82
散列錶與結構體 82
訪問結構體的另一種方式 84
嵌套字典結構 85
嵌套訪問器和非結構體 86
動態(運行時)嵌套訪問器 87
集閤 88
能力越大,誘惑越大 89
第9 章 番外篇—類型是什麼 90
第10 章 處理收集—Enum 與Stream 92
Enum——處理收集 92
關於排序的說明 95
輪到你瞭96
Stream——延遲處理的枚舉類型 96
流是可組閤的枚舉器 97
無限流 99
自定義流99
流在實際中的應用 104
Collectable 協議 104
推導式 105
推導式也可以處理二進製位 106
作用域與推導式 107
推導式的返迴值 107
輪到你瞭108
感動過往的神 109
第11 章 字符串與二進製型 110
字符串字麵量 110
Heredoc 111
魔術符 112
“字符串”這個名稱 113
單引號字符串——字符編碼列錶 114
輪到你瞭116
二進製型 117
雙引號字符串是二進製型 118
字符串與Elixir 庫 118
輪到你瞭124
二進製型與模式匹配 124
用二進製型來處理字符串 124
輪到你瞭125
熟悉卻又陌生 126
第12 章 控製流 127
if 與 unless 127
cond 128
case 131
拋齣異常 133
包含異常的設計 133
四兩撥韆斤 134
輪到你瞭134
第13 章 組織項目 136
項目:從 GitHub 獲取 issue 136
我們的代碼將如何工作 137
任務:用mix 來創建我們的新項目 137
創建項目樹 138
轉換:解析命令行 140
進階:編寫一些基本的測試 142
輪到你瞭144
轉換:從 GitHub 獲取數據 144
任務:使用外部庫 145
尋找庫 146
為項目添加庫 146
輪到你瞭148
迴到轉換148
轉換:轉換響應內容 151
不在 hex 裏的依賴項 152
應用程序配置 152
轉換:為數據排序 153
轉換:取前n 條 155
輪到你瞭156
轉換:格式化錶格 156
任務:創建命令行可執行程序 159
任務:添加日誌 161
任務:測試代碼注釋 163
任務:創建項目文檔 167
使用轉換數據的方法來編寫代碼 169
輪到你瞭170
第14 章 運用多進程 172
簡單的進程 173
在進程間發送消息 174
處理多條消息 175
遞歸、循環與棧 178
進程開銷 178
輪到你瞭181
進程何時結束 182
關聯兩個進程 183
監控進程185
輪到你瞭186
並行map——Erlang 版本的“Hello, World” 186
輪到你瞭187
斐波那契數服務器 188
任務調度器 189
輪到你瞭192
代理——一個難題 192
以進程的方式來思考 194
第15 章 節點——分布式服務的關鍵 195
命名節點 195
輪到你瞭197
節點、cookie 與安全 198
給你的進程命名 199
何時給進程命名 202
輪到你瞭202
I/O、PID 與節點 203
輪到你瞭204
節點是分布式的基礎 205
第16 章 OTP:服務器 206
一些 OTP 的定義 206
OTP 服務器 207
狀態和單個服務器 207
我們的第一個 OTP 服務器 208
輪到你瞭210
單嚮調用210
跟蹤服務器的執行情況 212
輪到你瞭214
GenServer 迴調函數 214
給進程命名 216
整理接口 217
輪到你瞭218
第17 章 OTP:應用程序監視器 220
應用程序監視器與工作進程 220
輪到你瞭223
管理重啓前後的進程狀態 223
應用程序監視器是可靠性的核心 229
輪到你瞭229
第18 章 OTP:應用程序 230
這不是傳統的應用程序 230
應用程序規範文件 231
將Sequence 程序轉變為OTP 應用程序 231
關於應用參數的更多信息 234
監視是可靠性的基礎 234
輪到你瞭235
熱代碼交換 235
OTP 很大——難以置信的大 241
輪到你瞭241
第19 章 任務與代理 242
任務 242
任務與監視 243
代理 244
更大的例子 246
使其分布式運行 248
使用代理與任務,還是GenServer 249
第三部分 更高級的Elixir
第20 章 宏與代碼求值 252
實現if 語句 252
宏注入代碼 254
裝載次序255
quote 函數 256
將內部錶示作為代碼使用 256
unquote 函數 258
展開列錶——unquote_splicing 259
迴到我們的myif 宏 260
輪到你瞭261
使用綁定來注入值 261
宏是衛生的 263
執行代碼片段的其他方法 264
宏與運算符 265
深入研究 266
更進一步 266
輪到你瞭267
第21 章 連接多個模塊:行為與use 268
行為 268
定義行為268
聲明行為269
use 與 __using__ 270
放到一起——跟蹤方法調用 270
使用use 275
輪到你瞭275
第22 章 協議——多態函數 277
定義協議 277
實現協議 278
可用的類型 279
輪到你瞭280
協議和結構體 280
內置協議:Access 281
內置協議:Enumerable 282
內置協議:String.Chars 285
內置協議:Inspect 286
協議就是多態 288
輪到你瞭288
第23 章 更酷的玩意兒 290
自定義魔術符 290
獲取選項292
輪到你瞭293
多應用的 umbrella 項目 294
創建 umbrella 項目 295
創建子項目 295
LineSigil 項目 296
Evaluator 項目 296
連接子項目 297
彆急!還有更多炫酷的玩意兒! 299
附錄A 異常:raise 與try,catch 與throw 300
附錄B 類型規範與類型檢查 306
推薦序
最開始杜萬說請我為他翻譯的Elixir 的新書寫一篇序,我一頭霧水,因為完全沒有聽說過“Elixir”這個詞,我甚至到現在都不知道這個單詞應該怎麼讀,雖然我已經讀完瞭全書。是的,剛纔那個句子很長,不好讀,然而它的邏輯是正確的。這跟我初步瞭解Elixir 的感覺差不多,不好理解,但邏輯是正確的。
雖然我現在很少寫代碼瞭,但是作為一個曾經寫瞭十幾年代碼的人,本書講述的內容,特彆是Elixir 的思想很是讓我震撼。我必須承認我並沒有徹底理解這本書,很多的細節沒有時間去詳細實踐,但就我不深的理解,已經體會到瞭這種基於進程的編程思想,以及它帶來的變革。
在我中學開始學習編程的時候,用的是 Pascal。我知道數據結構、算法,我會做題,然而我對軟件工程一無所知,不知道如何編寫一個完整的應用。後來大學的時候學習Java,纔知道 Pascal 是一種麵嚮過程的語言,Java 是麵嚮對象的語言。然而我花瞭很久纔理解瞭什麼叫作“對象”,以及什麼叫作麵嚮對象的編程。我清晰地記得 Java 課的第一次作業是編寫一個計算器程序。整個程序我隻有一個 Java 文件,所有的代碼都在這個文件中,活生生用 Java 語言寫瞭一個 Pascal 程序。
編程思想的轉變是睏難的。我在讀這本書的時候,再一次感受到瞭編程思想的轉變,從麵嚮對象到麵嚮進程。原本在 Java 中非常復雜的多綫程、分布式處理方式在 Elixir 中變得無比簡單,這也是 Elixir 在現代 IT 係統中的價值:最大化CPU 的處理能力。
大概一年前,我有一個朋友說他最近在瘋狂地研究 Erlang(一種跟 Elixir 接近的語言),他打算說服公司的領導用 Erlang 重做一個係統。當時我覺得他瘋瞭,我對 Erlang不瞭解,隻知道這是一種很奇怪、很小眾的編程語言,現在我可以理解那個朋友當時的想法瞭,他一定有一種腦洞大開的感覺!
不論你現在是做 APP 開發,傳統 Web 開發,還是在中國大紅大紫的微信開發,都應該讀一讀此書,它一定會讓你眼前一亮。沒有最好的編程語言,隻有最閤適的編程語言。隨著硬件的不斷發展,一定會有很多不同於過去常見的編程思想和語言齣現,以適應最新的硬件。也許本書的內容不能在你的工作中用到,但這不重要,重要的是思想的碰撞帶來的愉悅,以及碰撞後留下的那些思考。
張海龍,Coding CEO
2016 年1 月19 日·深圳
譯者序
還記得第一次得知 Elixir 是 Coding 的冒泡1上 mingshun2 的一句牢騷:“不要咖啡,不要大象,不要蟒蛇,不要紅寶石,隻要萬金油”。這句開發者的嘮叨,吸引瞭我的注意。顯然咖啡錶示 Java,蟒蛇錶示 Python,紅寶石錶示 Ruby,大象呢?“最好的編程語言,PHP”,一個同事提示道。Google 搜索瞭一下,果然 PHP 的 logo 是一頭大象。“那麼萬金油呢?”我追問道。同事也一副“什麼鬼”的錶情,湊過來一起Google 瞭一番,纔知道萬金油是 Erlang 虛擬機上的一門語言,相當於 Scala 之於 Java 虛擬機,英文名字叫Elixir。這是 Elixir 程序設計 下載 mobi epub pdf txt 電子書 格式
Elixir 程序設計 下載 mobi pdf epub txt 電子書 格式 2024
Elixir 程序設計 下載 mobi epub pdf 電子書書的頁麵紙張很黃,好像不像正版
評分很好的書,很有益處,可以看一看。
評分不錯
評分好評 六個字……
評分終於到手瞭
評分終於到手瞭
評分書挺好的,正在讀
評分可惜這本書丟瞭,這一次買的應該是正版。
評分不錯~~~~~~~~
Elixir 程序設計 mobi epub pdf txt 電子書 格式下載 2024