返回課程
AI019 Professional

Elixir 程式設計

一份全面指南,介紹如何使用 Elixir 進行函數式與並行程式設計。內容涵蓋從物件導向思維轉向函數式思維的過程、模式比對、不可變性、以角色模型實現並行處理,以及運用 OTP 建立穩固的分散式系統。

4.8
30.0h
981 學習者
0 讚好
人工智能
開始學習

課程總覽

📚 內容概要

一本全面介紹使用 Elixir 進行函數式與並行程式設計的指南。內容涵蓋從物件導向思維轉換至函數式思考,模式匹配、不可變性、以角色模型實現並行,以及利用 OTP 建立穩健的分散式系統。

透過函數式程式設計的美學,掌握打造韌性並行系統的藝術。

作者: Dave Thomas

致謝: José Valim、Corey Haines、Bruce Tate、Jessica Kerr、Anthony Eden、Chad Fowler、Kim Shrier、Candace Cunningham,以及 Potomac Indexing。

🎯 學習目標

  1. 比較 Elixir 的資料轉換模型與傳統的狀態驅動程式設計。
  2. 設定互動式 Elixir shell(IEx),並透過腳本與編譯執行 Elixir 程式碼。
  3. 使用匹配運算子(=)、鎖定運算子(^)和萬用字元(_)來解構與驗證資料。
  4. 解釋不可變性在效能與記憶體管理上的理論與實務影響。
  5. 認識並運用 Elixir 的內建型別,包括值型別、系統型別與集合型別。
  6. 應用變數作用域規則與 with 表達式,以處理複雜的資料轉換。
  7. 使用標準語法與捕捉語法(&)建立與呼叫匿名函數。
  8. 在模組中使用模式匹配與遞迴實作命名函數,以處理複雜邏輯。
  9. 使用守衛條件與預設參數來控制函數執行流程。
  10. 解構與建構列表: 利用頭/尾模式匹配來導航與建立遞迴列表結構。

🔹 第 1 課:Elixir 與模式匹配入門

概述: 本課介紹 Elixir 作為一種以資料轉換為核心的函數式語言,而非狀態變更。學生將學習如何導航 Elixir 環境(IEx)、編譯與執行腳本,並掌握「模式匹配」——Elixir 用於變數綁定與控制流程的基本機制。

學習成果:

  • 比較 Elixir 的資料轉換模型與傳統的狀態驅動程式設計。
  • 設定互動式 Elixir shell(IEx),並透過腳本與編譯執行 Elixir 程式碼。
  • 使用匹配運算子(=)、鎖定運算子(^)與萬用字元(_)來解構與驗證資料。

🔹 第 2 課:不可變性與 Elixir 基礎

概述: 本課探討 Elixir 的基本哲學:不可變性。學生將學習 Elixir 如何將資料視為不可變的實體,這種做法帶來的效能優勢,以及各種內建型別——從原子與範圍等簡單值型別,到映射表與二進位資料等複雜集合。課程最後深入探討變數作用域與強大的 with 表達式。

學習成果:

  • 解釋不可變性在效能與記憶體管理上的理論與實務影響。
  • 認識並運用 Elixir 的內建型別,包括值型別、系統型別與集合型別。
  • 應用變數作用域規則與 with 表達式,以處理複雜的資料轉換。

🔹 第 3 課:函數、模組與管道運算子

概述: 本課探討 Elixir 程式設計的核心:函數式轉換。內容涵蓋從匿名函數與閉包過渡到結構化模組與命名函數。學生將學習如何善用模式匹配、遞迴與管道運算子,創造簡潔、易讀且可維護的程式碼,同時與底層 Erlang VM 互動。

學習成果:

  • 使用標準語法與捕捉語法(&)建立與呼叫匿名函數。
  • 在模組中使用模式匹配與遞迴實作命名函數,以處理複雜邏輯。
  • 使用守衛條件與預設參數來控制函數執行流程。

🔹 第 4 課:遞迴列表與資料結構

概述: 本課透過遞迴探討 Elixir 列表的基本機制,特別聚焦於「頭與尾」模式,以處理與建立資料。課程進一步延伸至複雜資料結構——映射表、結構與關鍵字列表,提供選擇正確結構的決策框架,以及使用 Access 模組與 Elixir 型別系統理論來操作巢狀資料的高階技巧。

學習成果:

  • 解構與建構列表: 利用頭/尾模式匹配來導航與建立遞迴列表結構。
  • 實作高階模式: 建立自訂的 mapreduce 函數,以轉換或聚合列表資料。
  • 選擇合適的資料結構: 根據效能、順序與資料完整性需求,區分映射表、結構與關鍵字列表。

🔹 第 5 課:可枚舉、串流與字串處理

概述: 本課探討 Elixir 中處理集合的雙重方法:貪婪的 Enum 模組與惰性、可組合的 Stream 模組。同時深入解析透過捷徑(comprehensions)進行資料轉換,以及 Elixir 字串的內部機制,區分單引號字串(字元列表)與雙引號字串(二進位資料)。學生將學習處理複雜資料結構、處理無限資料,以及執行低階位元提取。

學習成果:

  • 区分處理集合時的貪婪評估與惰性評估。
  • 使用多個產生器與過濾器的清單捷徑來轉換資料,並提取位級資訊。
  • 辨別單引號字串(字元列表)與雙引號字串(二進位資料),並正確應用對應的模組(List 與 String)進行操作。

🔹 第 6 課:控制流程、Mix 專案與專業工具

概述: 本課指導開發者從撰寫孤立的 Elixir 函數,過渡到建立、測試與監控專業級應用程式。內容涵蓋進階控制結構(casecond)、Mix 專案的生命週期(從目錄結構到 CLI 可執行檔),以及用於除錯、屬性基礎測試與伺服器監控的一整套專業工具。

學習成果:

  • 使用 casecond 與例外處理來實現複雜的分支邏輯。
  • 使用 Mix 結構化 Elixir 專案,管理外部依賴如 HTTPoisonPoison,並設定應用程式環境。
  • 利用 ExUnitDocTestStreamData 的屬性基礎測試,建立穩健的測試套件。

🔹 第 7 課:並行與分散節點

概述: 本課探討從單一流程的 Elixir 應用轉向分散式系統的過程。內容涵蓋訊息處理機制、透過尾端遞迴迴圈實現的程序持久化,以及透過連結與監視來穩健管理程序生命週期。最後介紹 Erlang VM 的分散模型,教導如何連接節點、以憑證保護安全,並跨網路處理 I/O。

學習成果:

  • 使用尾端遞迴與訊息逾時,實作有狀態且持久化的程序。
  • 使用連結(spawn_link)與監視(spawn_monitor)建立容錯的程序樹。
  • 使用命名慣例、安全性憑證與全域程序註冊,設定與連接分散式節點。

🔹 第 8 課:OTP 基礎:伺服器與監督者

概述: 本課介紹 Elixir 生態系統中的開放電信平台(OTP)框架,專注於 GenServer 行為與 Supervisor 模式。學生將學習如何建立穩健、有狀態的伺服器程序,區分同步與非同步通訊,並實作能自動管理程序生命週期的容錯監督樹。

學習成果:

  • 定義 OTP 的核心元件,並實作標準的 GenServer 回呼生命週期。
  • 區分並實作同步(call)與非同步(cast)訊息模式。
  • 設定與部署監督者,以監控工作程序,確保系統在故障下仍具可靠性。

🔹 第 9 課:複雜 OTP 架構與狀態管理

概述: 本課從單一 GenServer 過渡到設計與部署複雜、多元件的 OTP 應用程式。內容涵蓋「Duper」重複檔案搜尋工具的架構設計、OTP 應用程式規格的機制,以及先進的部署技術,包括使用 Distillery 進行熱升級。此外,也探討簡化狀態管理的替代方案如 Tasks 與 Agents,提供針對特定並行需求選擇合適工具的框架。

學習成果:

  • 使用五問框架分析應用程式需求,以識別重點與執行時期特性。
  • 建構多伺服器 OTP 應用程式(Duper),利用專用伺服器(Results、PathFinder、Gatherer)與動態監督者。
  • 使用 Distillery 進行程式發布與熱升級,包含透過 code_change 回呼進行狀態遷移。

🔹 第 10 課:元程式設計、協議與類型安全

概述: 本課探討 Elixir 的進階可擴展性,專注於如何透過元程式設計與宏,將程式碼當作資料來操作。學生將學習如何使用協議與行為實作多型,以 Umbrella 專案結構大規模系統,並實施穩健的錯誤處理。最後,課程介紹如何使用 Elixir 的類型系統與 Dialyzer 加入靜態分析層,確保程式碼正確性。

學習成果:

  • 掌握 quoteunquote 用於在宏中插入與操縱程式碼區塊。
  • 實作自訂協議與行為,以建立多型且可重用的程式碼結構。
  • 建構多應用程式 Umbrella 專案,並為動態 Elixir 程式碼套用正式的類型規格。