3dwoo大學簡體電腦書店
函數式Swift
( 簡體 字)
作者:Chris Eidhof(克里斯·安道夫),Florian Kugler(弗洛萊恩·庫格勒),Wouter Swierstra(沃特·斯維)類別:1. -> 程式設計 -> 手機程式 -> Swift
出版社:電子工業出版社函數式Swift 3dWoo書號: 45035
詢問書籍請說出此書號!
有庫存
NT售價: 325
出版日:8/1/2016
頁數:192
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 字 )
ISBN:9787121293573 加入購物車加到我的最愛 (請先登入會員)
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社)
I 函數式Swift基礎 1
第1章 函數式思想 2
1.1 案例:Battleship 2
1.2 一等函數 7
1.3 類型驅動開發 11
1.4 注解 11
第2章 案例研究:封裝Core Image 12
2.1 濾鏡類型 12
2.2 構建濾鏡 13
模糊 13
顏色疊層 13
2.3 組合濾鏡 15
復合函數 16
2.4 理論背景:柯里化 17
2.5 討論 18
第3章 Map、Filter和Reduce 20
3.1 泛型介紹 20
頂層函數和擴展 24
3.2 Filter 24
3.3 Reduce 26
3.4 實際運用 29
3.5 泛型和Any類型 31
3.6 注釋 32
第4章 可選值 34
4.1 案例研究:字典 34
4.2 玩轉可選值 37
可選值鏈 37
分支上的可選值 39
可選映射 40
再談可選綁定 41
4.3 為什么使用可選值 43
第5章 案例研究:QuickCheck 47
5.1 構建QuickCheck 49
生成隨機數 49
實現check函數 51
5.2 縮小范圍 53
反復縮小范圍 54
5.3 隨機數組 55
5.4 使用QuickCheck 58
5.5 展望 59
第6章 不可變性的價值 60
6.1 變量和引用 60
6.2 值類型與引用類型 61
結構體與類:究竟是否可變 63
Objective-C 64
6.3 討論 65
第7章 枚舉 68
7.1 關于枚舉 68
7.2 關聯值 71
7.3 添加泛型 72
7.4 Swi中的錯誤處理 74
7.5 再聊聊可選值 75
7.6 數據類型中的代數學 76
7.7 為什么使用枚舉 78
第8章 純函數式數據結構 79
8.1 二叉搜索樹 79
8.2 基于字典樹的自動補全 85
字符串字典樹 91
8.3 討論 93
第9章 案例研究:圖表 94
9.1 繪制正方形和圓形 94
9.2 核心數據結構 97
9.3 計算與繪制 99
9.4 創建視圖與PDF 105
9.5 額外的組合算子 106
9.6 討論 107
II 函數式Swift進階 109
第10章 生成器和序列 110
10.1 生成器 110
10.2 序列 115
10.3 案例研究:遍歷二叉樹 118
10.4 案例研究:優化QuickCheck的范圍收縮 119
10.5 不止是Map與Filter 123
第11章 案例研究:解析器組合算子 127
11.1 核心部分 127
11.2 選擇 131
11.3 順序解析 131
改進 133
11.4 便利組合算子 138
11.5 一個簡單的計算器 143
第12章 案例研究:構建一個表格應用 148
12.1 示例代碼 148
12.2 解析器 149
符號化 149
解析 153
12.3 求值器 158
12.4 GUI 163
數據源 163
代理 165
窗口控制器 165
第13章 函子、適用函子與單子 167
13.1 函子 167
13.2 適用函子 169
13.3 單子 172
13.4 討論 174
第14章 尾聲 176
14.1 拓展閱讀 177
14.2 結語 178
參考文獻 179
Swift 是一門有著合適的語言特性來適配函數式編程方法的優秀語言,對于國內的不少開發者來說,Swift 可能是我們第一次真正有機會去接觸和使用的一門函數式特性語言。Swift 在語法上更加優雅靈活,語言本身也遵循了函數式的設計模式。本書是一本引領你進入 Swift 函數式編程世界的優秀讀物,它讓更多的中國開發者有機會接觸并了解 Swift 語言函數式的一面,是廣大程序開發者不可多得的工具書。

譯序
隨著程序語言的發展,軟件開發人員所熟知和使用的工具也在不斷進化。以Java和C++為代表的面向對象編程的編程方式在20世紀企業級的軟件開發中大放異彩,然而隨著軟件行業的不斷發展,開發者們發現了面向對象范式的諸多不足。面向對象強調的是將與某數據類型相關的一系列操作都封裝到該數據類型中去,因此,在數據類型中難免存在大量狀態,以及相關的行為。雖然這很符合人類的邏輯直覺,但是當類型關系變得錯綜復雜時,類型中狀態的改變和類型之間彼此的繼承和依賴將使程序的復雜度呈幾何級數上升。
避免使用程序狀態和可變對象,是降低程序復雜度的有效方式之一,而這也正是函數式編程的精髓。函數式編程強調執行的結果,而非執行的過程。我們先構建一系列簡單卻具有一定功能的小函數,然后再將這些函數進行組裝以實現完整的邏輯和復雜的運算,這是函數式編程的基本思想。
正如上面引言所述,Swift 是一門有著合適的語言特性來適配函數式編程方法的優秀語言。這個世界上最純粹的函數式編程語言非Haskell莫屬,但是由于我國程序開發的起步和走熱相對西方世界要晚一些,使用Haskell的開發者可謂寥寥無幾,因此Haskell在國內的影響力也十分有限。對國內的不少開發者,特別是iOS / OS X的開發者來說,Swift可能是我們第一次真正有機會去接觸和使用的一門函數式特性語言。相比于很多已有的函數式編程語言,Swift在語法上更加優雅靈活,語言本身也遵循了函數式的設計模式。作為函數式編程的入門語言,可以說Swift是非常理想的選擇。而本書正是一本引領你進入Swift函數式編程世界的優秀讀物,讓更多的中國開發者有機會接觸并了解Swift語言函數式的一面,正是我們翻譯本書的目的所在。
本書大致上可以分為兩個部分。首先,在第1章至第9章中,我們會介紹Swift函數式編程特性的一些基本概念,包括高階函數的使用方法、不可變量的必要性、可選值的存在價值、枚舉在函數式編程中的意義,以及純函數式數據結構的優勢等內容。這些都是函數式編程中的基本概念,也構成了Swift函數式特性甚至是這門語言的基礎。當然,在這些概念講解中我們也穿插了不少研究案例,以幫助讀者真正理解這些基本概念,并對在何時使用它們以及使用它們為程序設計帶來的改善形成直觀印象。第二部分從第10章開始,相比于前面的章節,這部分屬于本書的進階內容。我們將從構建最基本的生成器和序列開始,利用解析器組合算子構建一個解析器庫,并最終實現一個相對復雜的公式解析器和函數式的表格應用。這部分內容環環相扣,因為內容抽象度較高,所以理解起來也可能比較困難。如果你在閱讀第12章時遇到麻煩,則強烈建議你下載對應的完整源碼進行研究,并且折回頭去再次閱讀第二部分的相關章。隨著你對各個函數式算子的深入理解,函數式編程的概念和思想將自然而然進入你的血液,這將豐富你的知識體系,并會對之后的開發工作大有裨益。
本書原版的三位作者都是富有經驗的函數式編程方法的使用者或教師,他們將自己對于函數式編程的理解和Swift中的相關特性進行了對應和總結,并將這些聯系揭示了出來。而中文版的三位譯者花費了大量時間和精力,試圖將這些規律以更易于理解的組織方式和語言,帶給國內的開發者們。不過不論是原作者還是譯者,其實和各位讀者一樣,都只不過是普通開發者中的一員,所以本書出現謬漏可能在所難免。如果您在閱讀時發現了問題,可以給我們發郵件,或是在本書issue頁面提出,我們將及時研究并加以改進。
事不宜遲,現在就讓我們開始在函數式的世界中遨游一番吧!
——陳聿菡 杜欣 王巍

前言
為什么寫這本書?關于Swift,已經有大量來自蘋果的現成文檔,而且還有更多的書正在編寫中。為什么世界上依然需要關于這種編程語言的另一本書呢?
這本書嘗試讓你學會以函數式的方式進行思考。我們認為Swift有著合適的語言特性來適配函數式的編程方法。然而是什么使得程序具有函數式特性?又為何要一開始就學習關于函數式的內容呢?
很難給出函數式的準確定義——同樣地,我們也很難給出面向對象編程,抑或是其他編程范式的準確定義。因此,我們會盡量把重點放在我們認為設計良好的Swift函數式程序應該具有的一些特質上:
? 模塊化:相比于把程序認為是一系列賦值和方法調用,函數式開發者更傾向于強調每個程序都能夠被反復分解為越來越小的模塊單元,而所有這些塊可以通過函數裝配起來,以定義一個完整的程序。當然,只有當我們能夠避免在兩個獨立組件之間共享狀態時,才能將一個大型程序分解為更小的單元。這引出我們的下一個關注特質。
? 對可變狀態的謹慎處理:函數式編程有時候(被半開玩笑地)稱為“面向值編程”。面向對象編程專注于類和對象的設計,每個類和對象都有自己的封裝狀態。然而,函數式編程強調基于值編程的重要性,這能使我們免受可變狀態或其他一些副作用的困擾。通過避免可變狀態,函數式程序比其對應的命令式或者面向對象的程序更容易組合。
? 類型:最后,一個設計良好的函數式程序在使用類型時應該相當謹慎。精心選擇你的數據和函數的類型,將會有助于構建你的代碼,這比其他東西都重要。Swift有一個強大的類型系統,使用得當的話,則它能夠讓你的代碼更加安全和健壯。
我們認為這些特質是Swift程序員可能從函數式編程社區學習到的精華點。在這本書中,我們會通過許多實例和學習案例說明以上幾點。
根據我們的經驗,學習用函數式的方式思考并不容易。它挑戰了我們既有的熟練解決問題的方式。對習慣寫for循環的程序員來說,遞歸可能讓我們倍感迷惑;賦值語句和全局狀
態的缺失讓我們寸步難行;更不用提閉包、泛型、高階函數和單子(Monad),這些東西簡直
讓人痛不欲生。
在這本書中,我們假定你以前有過 Objective-C (或其他一些面向對象的語言) 的編程經驗。書中不會涵蓋Swift的基礎知識,或者教你建立你的第一個Xcode工程,不過我們會嘗試在
適當的時候引用現有的Apple文檔。你應當能自如地閱讀Swift程序,并且熟悉常見的編程
概念,如類、方法和變量等。如果你只是剛剛開始學習編程,則這本書可能并不適合你。
在這本書中,我們希望讓函數式編程易于理解,并消除人們對它的一些偏見。使用這些理念去改善你的代碼并不需要你擁有數學的博士學位!函數式編程并不是Swift編程的唯一方式。但是我們相信學習函數式編程會為你的工具箱添加一件重要的新工具,不論你使用那種語言,這件工具都會讓你成為一個更好的開發者。
示例代碼
你可以在我們的 GitHub 倉庫中找到本書里所有的示例代碼。這個倉庫包括一些章節的playgrounds,以及其他章節的Swift文件和OS X工程。
書籍更新
隨著Swift的發展,我們會繼續更新和改進這本書。如果你遇到任何錯誤,或者是想給我們其他類型的反饋,請在我們的GitHub倉庫中創建一個issue。
致謝
我們想要感謝眾多幫助我們塑造了這本書的人。在此我們想要特別提及其中幾位:
Natalye Childress是我們的出版編輯。她給了我們很多寶貴的反饋意見,不僅保證了語言的正確性和一致性,而且確保了本書清晰易懂。
Sarah Lincoln設計了本書的封面和布局。
Wouter想要感謝烏得勒支大學允許他能夠在這本書上投入時間進行編寫。
我們想要感謝測試版讀者在本書的寫作過程中給我們的反饋(按字母順序排列):
Adrian Kosmaczewski, Alexander Altman, Andrew Halls, Bang Jun-young, Daniel Eggert, Daniel
Steinberg, David Hart, David Owens II, Eugene Dorfman, f-dz-v, Henry Stamerjohann, J Bucaran,
Jamie Forrest, Jaromir Siska, Jason Larsen, Jesse Armand, John Gallagher, Kaan Dedeoglu, Kare
Morstol, Kiel Gillard, Kristopher Johnson, Matteo Piombo, Nicholas Outram, Ole Begemann, Rob
Napier, Ronald Mannak, Sam Isaacson, Ssu Jen Lu, Stephen Horne, TJ, Terry Lewis, Tim Brooks,
Vadim Shpakovski.
Chris
Florian
Wouter
pagetop