編程與類型系統 Programming with Types

Vlad Riscutia 趙利通譯

  • 出版商: 機械工業
  • 出版日期: 2021-01-01
  • 定價: $714
  • 售價: 8.5$607
  • 語言: 簡體中文
  • 頁數: 316
  • 裝訂: 平裝
  • ISBN: 7111670515
  • ISBN-13: 9787111670513
  • 相關分類: 程式語言
  • 此書翻譯自: Programming with Types
  • 立即出貨

買這商品的人也買了...

商品描述

本書全面介紹類型系統的特性,從基本類型開始,
一直介紹到函數類型和子類型、OOP、泛型編程和高階類型(如函子和單子)。
本書沒有關注這些特性背後的理論,而是通過實際應用的方式來解釋每種特性。
本書說明瞭如何以及何時使用每種特性來改進代碼。

作者簡介

弗拉德.里斯庫迪亞(Vlad Riscutia)

Microsoft的首席軟件架構師,領導開發了幾個大型軟件項目,並指導了許多初級軟件工程師。
曾管理Office授權團隊,包括將Office授權棧重新設計為基於服務的模型,集成Windows開箱即用體驗,並發布Office 2019。

目錄大綱

前言

致謝

關於本書

類型及可能的取值

常用算法

第1章類型簡介1
1.1為什麼存在類型2
1.1.1 0和12
1.1.2類型和類型系統的定義3
1.2類型系統的優點4
1.2.1正確性5
1.2.2不可變性6
1.2.3封裝8
1.2.4可組合性9
1.2.5可讀性11
1.3類型系統的類型12
1.3.1動態類型和靜態類型12
1.3.2弱類型與強類型13
1.3.3類型推斷15
小結15

第2章基本類型17
2.1設計不返回值的函數17
2.1.1空類型18
2.1.2單元類型20
2.1.3習題21
2.2布爾邏輯和短路21
2.2.1布爾表達式22
2.2.2短路計算22
2.2.3習題24
2.3數值類型的常見陷阱24
2.3.1整數類型和溢出25
2.3.2浮點類型和圓整28
2.3.3任意大數30
2.3.4習題31
2.4編碼文本31
2.4.1拆分文本31
2.4.2編碼32
2.4.3編碼庫34
2.4.4習題36
2.5使用數組和引用構建數據結構36
2.5.1固定大小數組36
2.5.2引用37
2.5. 3高效列表38
2.5.4二叉樹40
2.5.5關聯數組43
2.5.6實現時的權衡44
2.5.7習題44
小結44
習題答案45

第3章組合46
3.1複合類型47
3.1.1元組47
3.1. 2賦予意義49
3.1.3維護不變量50
3.1.4習題53
3.2使用類型表達多選一53
3.2.1枚舉53
3.2.2可選類型55
3.2.3結果或錯誤57
3.2.4變體62
3.2.5習題65
3.3訪問者模式65
3.3.1簡單實現66
3.3.2使用訪問者模式67
3.3.3訪問變體69
3.3.4習題71
3.4代數數據類型71
3.4.1乘積類型71
3.4.2和類型72
3.4.3習題72
小結73
習題答案74

第4章類型安全75
4.1避免基本類型偏執來防止錯誤解釋76
4.1.1火星氣候探測者號77
4.1.2基本類型偏執反模式79
4.1.3習題79
4.2實施約束80
4.2.1使用構造函數實施約束80
4.2.2使用工廠實施約束81
4.2.3習題82
4.3添加類型信息82
4.3.1類型轉換82
4.3.2在類型系統之外跟踪類型83
4.3.3常見類型轉換86
4.3.4習題89
4.4隱藏和恢復類型信息89
4.4.1異構集合90
4.4.2序列化92
4.4.3習題95
小結96
習題答案96

第5章函數類型98
5.1一個簡單的策略模式99
5.1.1函數式策略100
5.1.2函數的類型101
5.1.3策略實現102
5.1.4一等函數102
5.1.5習題103
5.2不使用switch語句的狀態機103
5.2.1類型編程小試牛刀104
5.2.2狀態機106
5.2.3回顧狀態機實現111
5.2.4習題112
5.3使用延遲值避免高開銷的計算112
5.3.1 lambda113
5.3.2習題115
5.4使用map 、filter和reduce115
5.4.1 map()115
5.4.2 filter()117
5.4.3 reduce()119
5.4.4庫支持122
5.4.5習題123
5.5函數式編程123
小結123
習題答案124

第6章函數類型的高級應用126
6.1一個簡單的裝飾器模式126
6.1.1函數裝飾器128
6.1.2裝飾器實現130
6.1.3閉包130
6.1.4習題131
6.2實現一個計數器131
6.2.1一個面向對象的計數器132
6.2.2函數式計數器133
6.2.3一個可恢復的計數器134
6.2.4回顧計數器實現135
6.2.5習題135
6.3異步執行運行時間長的操作135
6.3.1同步執行136
6.3.2異步執行:回調136
6.3.3異步執行模型137
6.3.4回顧異步函數141
6.3.5習題141
6.4簡化異步代碼142
6.4.1鏈接promise143
6.4.2創建promise144
6.4.3關於promise的更多信息146
6.4.4 async/await150
6.4.5回顧整潔的異步代碼152
6.4.6習題152
小結153
習題答案153

第7章子類型155
7.1在TypeScript中區分相似的類型156
7.1.1結構和名義子類型的優缺點158
7.1.2在TypeScript中模擬名義子類型159
7.1.3習題160
7.2子類型的極端情況160
7.2.1安全的反序列化160
7.2.2錯誤情況的值164
7.2.3回顧頂層和底層類型167
7.2.4習題168
7.3允許的替換168
7.3.1子類型與和類型169
7.3.2子類型和集合171
7.3.3子類型和函數的返回類型172
7.3.4子類型和函數實參類型174
7.3.5回顧可變性178
7.3.6習題178
小結179
習題答案179

第8章面向對象編程的元素181
8.1使用接口定義契約182
8.2繼承數據和行為185
8.2.1 “是一個”經驗準則185
8.2. 2建模層次186
8.2.3參數化表達式的行為187
8.2.4習題188
8.3組合數據和行為189
8.3.1 “有一個”經驗準則189
8.3.2複合類190
8.3.3實現適配器模式192
8.3 .4習題194
8.4擴展數據和行為194
8.4.1使用組合擴展行為195
8.4.2使用混入擴展行為197
8.4.3 TypeScript中的混入198
8.4.4習題199
8.5純粹面向對象代碼的替代方案199
8.5. 1和類型200
8.5.2函數式編程202
8.5.3泛型編程203
小結204
習題答案204

第9章泛型數據結構206
9.1解耦關注點207
9.1.1可重用的恆等函數208
9.1.2可選類型210
9.1.3泛型類型211
9.1.4習題211
9.2泛型數據佈局212
9.2.1泛型數據結構212
9.2.2什麼是數據結構213
9.2.3習題214
9.3遍歷數據結構214
9.3.1使用迭代器216
9.3.2流線化迭代代碼220
9.3.3回顧迭代器225
9.3.4習題226
9.4數據流226
9.4.1處理管道227
9.4.2習題228
小結228
習題答案229

第10章泛型算法和迭代器232
10.1更好的map()、filter()和reduce()233
10.1.1 map()233
10.1.2 filter()234
10.1.3 reduce()234
10.1.4 filter()/reduce()管道235
10.1.5習題236
10.2常用算法236
10.2.1使用算法代替循環237
10.2.2實現流暢管道237
10.2.3習題241
10.3約束類型參數241
10.3.1具有類型約束的泛型數據結構242
10.3.2具有類型約束的泛型算法243
10.3.3習題245
10.4高效reverse和其他使用迭代器的算法245
10.4.1迭代器的基礎模塊247
10.4.2有用的find()251
10.4.3高效的reverse()254
10.4.4高效地獲取元素257
10.4.5回顧迭代器259
10.4.6習題260
10.5自適應算法260
小結262
習題答案263

第11章高階類型及其他266
11.1更加通用的map267
11.1.1處理結果或傳播錯誤270
11.1.2混搭函數的應用272
11.1.3函子和高階類型273
11.1.4函數的函子276
11.1.5習題277
11.2單子277
11.2.1結果或錯誤277
11.2.2 map ()與bind()的區別282
11.2.3單子模式284
11.2.4 continuation單子285
11.2.5列表單子286
11.2.6其他單子288
11.2.7習題288
11.3繼續學習289
11.3.1函數式編程289
11.3.2泛型編程289
11.3.3高階類型和範疇論289
11.3.4從屬類型290
11.3.5線性類型290
小結290

習題答案291

附錄A TypeScript的安裝及本書的源代碼293

附錄B TypeScript速