●前言 1
本書適合你嗎 2
這本書裡有什麼 2
選擇Elixir 3
安裝Elixir 3
運行代碼 3
在線資源 4
章 函數思想 5
1.1 為什麼需要函數式編程 5
1.1.1 命令式語言的局限性 6
1.1.2 轉向函數式編程 6
1.3 使用不可變數據 7
1.4 使用函數構建程序 9
1.4.1 明確地使用值 9
1.4.2 在參數中使用函數 11
1.4.3 值的轉換 11
1.5 聲明式編程 12
1.6 小結 14
第2章 使用變量和函數 15
2.1 表示值 15
2.2 執行代碼並生成結果 17
2.2.1 創建邏輯表達式 19
2.3 變量值綁定 20
2.4 創建匿名函數 22
2.4.1 函數是一等公民 24
2.4.2 在不使用參數的情況下共享值 25
2.5 具名函數 29
2.5.1 Elixir的具名函數 29
2.5.2 創建模塊和函數 30
2.5.3 導入具名函數 33
2.5.4 將具名函數作為值使用 34
2.6 結束語 36
2.6.1 練習 36
第3章 使用模式匹配控制程序流程 39
3.1 模式匹配 39
3.2 從各種數據中提取值 41
3.2.1 匹配部分字符串 41
3.2.2組 42
3.2.3 匹配列表 45
3.2.4 匹配映射表 48
3.2.5 映射表與關鍵字列表 50
3.2.6 匹配結構體 50
3.3 用函數控制流程 52
3.3.1 函數的默認值 54
3.4 使用衛語句控制流程 55
3.5 Elixir的流程控制結構 60
3.5.1 Case:使用模式匹配進行控制 60
3.5.2 Cond:使用邏輯表達式進行控制 62
3.5.3 使用if和unless表達式 62
3.6 小結 64
第4章 運用遞歸 67
4.1 有界遞歸 67
4.1.1 遍歷列表 69
4.1.2 轉換列表 70
4.2 遞歸治理 73
4.2.1 減治法 74
4.2.2 分治法 75
4.3 尾調用優化 79
4.4 無界遞歸函數 82
4.4.1 添加界限 84
4.4.2 避免無限循環 85
4.5 遞歸調用匿名函數 87
4.6 小結 88
第5章 使用高階函數 91
5.1 處理列表的高階函數 92
5.1.1 遍歷列表 92
5.1.2 轉換列表 93
5.1.3 將列表歸納為一個值 95
5.1.4 過濾列表項 96
5.2 使用 Enum 模塊 97
5.3 使用推導式 99
5.4 管道運算符 100
5.5 延遲計算 103
5.5.1 延遲執行函數 103
5.5.2 處理無限數據 105
5.5.3 數據流管道 108
5.6 小結 112
5.6.1 練習 112
第6章 設計Elixir應用程序 113
6.1 使用Mix創建項目 113
6.1.1 我們將創建什麼 114
6.1.2 運行新任務 115
6.1.3 創建啟動任務 117
6.2 設計實體的結構體 118
6.2.1 創建角色的結構體 118
6.2.2 列出英雄 120
6.2.3 選擇一個英雄角色 123
6.3 使用協議創建多態函數 126
6.3.1 構建引用結構體的結構體 126
6.3.2 重構模塊和復用函數 127
6.3.3 使用協議顯示角色和動作 130
6.4 創建模塊行為 133
6.4.1 使用Elixir行為創建出口 134
6.4.2 添加類型規範 137
6.4.3 戰鬥到底 140
6.5 小結 146
6.5.1 練習 146
第7章 處理非純函數 149
7.1 純函數與非純函數 150
7.1.1 純函數 150
7.1.2 非純函數 151
7.2 控制非純函數的流程 153
7.3 Try、Rescue、Catch 157
7.3.1 Try、Raise、Rescue 157
7.3.2 Try、Throw、Catch 159
7.4 使用錯誤單子處理非純函數 161
7.5 使用with 167
7.6 小結 169
7.6.1 練習 170
7.6.2 尾聲 170
附錄1 為遊戲添加房間 173
附錄2 練習答案 177
A2.1 第2章練習答案 177
A2.2 第3章練習答案 178
A2.3 第4章練習答案 181
A2.4 第5章練習答案 184
參考書目 187
致謝 189
索引 191
內容簡介
函數式編程具有代碼簡潔、開發速度快、易理解、易維護、擴展性強的特點,在某些領域可以解決讓命令式編程頭痛的問題,具有廣泛的應用場景和良好的發展前景。本書是函數式編程的零基礎教程,以Elixir為例講解函數式編程與命令式編程的區別,幫助讀者掌握函數式編程的基本概念和思想(如不可變值、顯式數據轉換、模式匹配、遞歸函數、高階函數、多態等),並避免新手常犯的錯誤。本書尤其適合對Elixir感興趣且無函數式編程基礎的讀者入門學習。