Elixir簡單直接的語法非常適合用來學習函數(shù)式編程。
本書循序漸進地講解函數(shù)式編程的關(guān)鍵概念,包括遞歸函數(shù)、模式匹配、不可變值、顯式數(shù)據(jù)轉(zhuǎn)換、模塊、高階函數(shù)、多態(tài)函數(shù)、錯誤處理等,借助清晰明了的案例讓讀者在不知不覺中掌握函數(shù)式編程思想和Elixir語法。
理解函數(shù)式編程的三個關(guān)鍵概念:模式匹配、遞歸、流程控制。
學習在函數(shù)式編程中使用列表、元組、映射表等常用數(shù)據(jù)結(jié)構(gòu)。
利用高階函數(shù)改善程序的可讀性。
借助流提高編程效率。
使用多態(tài)和協(xié)議處理各種類型的數(shù)據(jù)。
掌握錯誤處理。
函數(shù)式編程具有代碼簡潔、開發(fā)速度快、易理解、易維護、擴展性強的特點,在某些領(lǐng)域可以解決讓命令式編程頭痛的問題,具有廣泛的應(yīng)用場景和良好的發(fā)展前景。本書是函數(shù)式編程的零基礎(chǔ)教程,以Elixir為例講解函數(shù)式編程與命令式編程的區(qū)別,幫助讀者掌握函數(shù)式編程的基本概念和思想(如不可變值、顯式數(shù)據(jù)轉(zhuǎn)換、模式匹配、遞歸函數(shù)、高階函數(shù)、多態(tài)等),并避免新手常犯的錯誤。本書尤其適合對Elixir感興趣且無函數(shù)式編程基礎(chǔ)的讀者入門學習。
自我的上一本譯作《Elixir程序設(shè)計》出版已經(jīng)過去了三年。Elixir也從1.2版本更新到了1.10版本。官方一直保持著每半年更新一個大版本的節(jié)奏。在這些更新版本中,有關(guān)語法的變化越來越少,針對庫、工具鏈、使用體驗、性能的更新越來越多,特別是1.9版本,José Valim聲稱Release是最后一個計劃中的特性。我真為Elixir的日臻完善而感到高興。
很多人把Elixir比作Erlang平臺的Ruby。誠然,Elixir的作者和貢獻者從Ruby身上借用了許多設(shè)計。Ruby的編程體驗可以說是令人驚艷的,其動態(tài)、簡潔、元編程都是Java、Golang、Python這些同時的編程語言所不具備的。當然,Ruby在性能和并發(fā)編程方面也有不足。Elixir選擇將其基座造在BEAM(Erlang VM)之上,BEAM以9個9的可用性(31毫秒/年的宕機時間)而著稱。就并發(fā)而言,Actor模型曾經(jīng)是Erlang的優(yōu)勢之一,但今天Rust的Actix和Java的Vert.x性能測評甚至比Erlang還要好。Erlang的真正優(yōu)勢在于搶占式調(diào)度帶來的低延時和軟實時性。Elixir的設(shè)計目標是更高的可擴展性、更高的生產(chǎn)力,同時保持跟Erlang生態(tài)圈的兼容性。
Elixir的官方定義為:一種用于構(gòu)建可伸縮、可維護應(yīng)用的動態(tài)、函數(shù)式編程語言(Elixir is a dynamic, functional language designed for building scalable and maintainable applications.)。下面我們就來談?wù)凟lixir與眾不同的地方。
相比于大家熟悉的面向?qū)ο缶幊蹋∣OP),函數(shù)式編程(FP)更強調(diào)程序執(zhí)行的結(jié)果而不是過程,它倡導利用若干簡單的執(zhí)行單元漸進地、逐層地完成運算,而不是設(shè)計一個復雜的執(zhí)行過程。每個函數(shù)的執(zhí)行結(jié)果只依賴于函數(shù)的參數(shù),而不受其他數(shù)據(jù)的影響。嚴格的函數(shù)式語言要求函數(shù)必須無副作用。
前言 1
本書適合你嗎 2
這本書里有什么 2
選擇Elixir 3
安裝Elixir 3
運行代碼 3
在線資源 4
第1章 函數(shù)思想 5
1.1 為什么需要函數(shù)式編程 5
1.1.1 命令式語言的局限性 6
1.1.2 轉(zhuǎn)向函數(shù)式編程 6
1.3 使用不可變數(shù)據(jù) 7
1.4 使用函數(shù)構(gòu)建程序 9
1.4.1 明確地使用值 9
1.4.2 在參數(shù)中使用函數(shù) 11
1.4.3 值的轉(zhuǎn)換 11
1.5 聲明式編程 12
1.6 小結(jié) 14
第2章 使用變量和函數(shù) 15
2.1 表示值 15
2.2 執(zhí)行代碼并生成結(jié)果 17
2.2.1 創(chuàng)建邏輯表達式 19
2.3 變量值綁定 20
2.4 創(chuàng)建匿名函數(shù) 22
2.4.1 函數(shù)是一等公民 24
2.4.2 在不使用參數(shù)的情況下共享值 25
2.5 具名函數(shù) 29
2.5.1 Elixir的具名函數(shù) 29
2.5.2 創(chuàng)建模塊和函數(shù) 30
2.5.3 導入具名函數(shù) 33
2.5.4 將具名函數(shù)作為值使用 34
......