倉頡編程從入門到實踐
柳偉衛
- 出版商: 北京大學
- 出版日期: 2025-11-01
- 售價: $594
- 語言: 簡體中文
- 頁數: 376
- ISBN: 7301360878
- ISBN-13: 9787301360873
-
相關分類:
Functional-programming
下單後立即進貨 (約4週~6週)
商品描述
隨著萬物互聯以及智能時代的到來,軟件的形態將發生巨大的變化。一方面,移動應用和移動互聯網領域仍然強力驅動人機交互、設備協同、智能化、安全性等方向的創新;另一方面,人工智能也同樣驅動軟件朝智能化、端邊雲協同等方向演進。新技術、新場景下應用軟件的開發對編程語言提出了新的訴求和挑戰。華為自研的倉頡編程語言作為一款面向全場景應用開發的現代編程語言,通過現代語言特性的集成、 的編譯優化和運行時實現,以及開箱即用的工具鏈支持,為開發者打造了友好開發體驗和 程序性能。本書主要介紹倉頡編程語言開發,內容涉及倉頡編程語言的通用編程概念、基本數據類型、類、接口、擴展、模式匹配、泛型、集合類型、異常處理、包、基礎I/O操作、函數式編程、並發編程、宏編程、網絡編程、CJPM包管理、自動化測試等眾多話題,可謂倉頡編程語言的“百科全書”。其中,綜合實戰部分演示了KV數據庫、雪花算法、HarmonyOS瀑布流的實現過程,可以令讀者從零開始掌握倉頡編程語言。本書實例豐富,將理論講解 終落實到代碼實現上。本書內容由淺入深、層層推進、結構清晰、實例豐富、通俗易懂、實用性強,適合倉頡編程語言的初學者和進階讀者作為自學教程,也可作為培訓學校和各大院校的相關專業的教學參考書。
作者簡介
柳偉衛,網名老衛、waylau,在IT公司擔任項目經理、架構師、 技術顧問等職位,是CSDN、 開源中國、阿裏雲開發者、華為開發者等技術社區專家,慕課網、華為開發者聯盟社區認證講師,HarmonyOS技術達人,曾獲2021、2022年度牛人之星、2022年度OpenHarmony開源貢獻之星。著有《跟老衛學HarmonyOS開發》等開源書,並出版了《鴻蒙HarmonyOS手機應用開發實戰》《鴻蒙HarmonyOS應用開發從入門到精通》《Spring Boot 2.0企業級應用開發實戰》《Spring Cloud 微服務架構開發實戰》《Spring 5 開發大全》《Cloud Native 分布式架構原理與實踐》《大型互聯網應用輕量級架構實戰》等專著。
目錄大綱
第1章 倉頡編程語言初體驗
1.1 歡迎進入倉頡編程語言世界 2
1.1.1 倉頡特性 2
1.1.2 高效編程 3
1.1.3 安全可靠 4
1.1.4 輕松並發 4
1.1.5 卓越性能 4
1.2 安裝倉頡編程語言 5
1.3 搭建倉頡編程語言開發環境 10
1.4 實戰:開發第一個倉頡編程語言應用“Hello World!” 11
1.5 總結 13
1.6 習題:開發“Hello World!”應用 13
第2章 通用編程概念
2.1 變量與常量 15
2.1.1 變量 15
2.1.2 常量 17
2.2 標識符與程序結構 18
2.2.1 標識符 18
2.2.2 程序結構 19
2.3 函數 20
2.3.1 定義函數 21
2.3.2 函數參數 21
2.3.3 函數返回值 23
2.4 註釋 24
2.4.1 單行註釋 24
2.4.2 多行註釋 25
2.5 流程控制 25
2.5.1 分支 25
2.5.2 循環 27
2.6 實戰:猜數字遊戲 29
2.6.1 輸入數字 29
2.6.2 比較大小 30
2.6.3 循環輸入 31
2.6.4 運行效果 31
2.7 結構類型 32
2.7.1 定義struct類型 32
2.7.2 創建struct實例 37
2.7.3 mut函數 39
2.8 總結 39
2.9 習題:統計字符串的字符數 40
第3章 基本數據類型
3.1 整數類型 42
3.1.1 整數類型字面量 42
3.1.2 字符字節字面量 43
3.1.3 整數類型支持的操作符 43
3.2 浮點類型 44
3.2.1 浮點類型字面量 44
3.2.2 浮點類型支持的操作符 45
3.3 布爾類型 45
3.3.1 布爾類型字面量 45
3.3.2 布爾類型支持的操作符 46
3.4 字符類型 46
3.4.1 字符類型字面量 46
3.4.2 字符類型支持的操作符 47
3.5 字符串類型 47
3.5.1 字符串字面量 47
3.5.2 插值字符串 48
3.5.3 字符串類型支持的操作 49
3.6 實戰:操作字符串 49
3.6.1 構造 50
3.6.2 查找 50
3.6.3 拼接 51
3.6.4 替換 52
3.7 元組類型 52
3.7.1 元組類型字面量 52
3.7.2 元組類型的類型參數 53
3.8 數組類型 53
3.8.1 定義數組 54
3.8.2 訪問數組 54
3.8.3 修改數組 55
3.8.4 數組的排序 56
3.8.5 VArray 57
3.9 區間類型 58
3.10 Unit類型 59
3.11 Nothing類型 59
3.12 總結 60
3.13 習題:將包含句號的句子轉換為單詞 60
第4章 類、接口及擴展
4.1 類 63
4.1.1 class定義 63
4.1.2 this類型 69
4.1.3 創建對象 70
4.1.4 class的繼承 71
4.2 接口 76
4.2.1 接口定義 77
4.2.2 接口繼承 82
4.2.3 接口實現 84
4.2.4 Any類型 86
4.3 屬性 86
4.3.1 屬性定義 87
4.3.2 屬性使用 91
4.4 子類型關系 93
4.5 類型轉換 96
4.5.1 數值類型之間的轉換 97
4.5.2 Rune到UInt32和整數類型到Rune的轉換 97
4.5.3 is和as操作符 98
4.6 直接擴展 100
4.6.1 擴展概述 100
4.6.2 直接擴展 100
4.6.3 接口擴展 102
4.7 擴展訪問規則 105
4.7.1 擴展的修飾符 105
4.7.2 擴展的孤兒規則 106
4.7.3 擴展的訪問和遮蓋 106
4.7.4 擴展的導入和導出 109
4.8 總結 111
4.9 習題:面向對象的圖形 111
第5章 模式匹配
5.1 模式概述 114
5.1.1 枚舉類型 114
5.1.2 Option類型 116
5.1.3 常量模式 117
5.1.4 通配符模式 118
5.1.5 綁定模式 118
5.1.6 tuple模式 119
5.1.7 類型模式 120
5.1.8 enum模式 120
5.1.9 模式的嵌套組合 121
5.2 refutable模式和irrefutable模式 122
5.3 match 124
5.3.1 含匹配值的match表達式 124
5.3.2 沒有待匹配值的match表達式 125
5.4 if-let 125
5.5 while-let 126
5.6 模式適用場景 127
5.7 實戰:猜數字遊戲 129
5.7.1 輸入數字 129
5.7.2 比較大小 130
5.7.3 循環輸入 130
5.7.4 運行效果 131
5.8 總結 132
5.9 習題:“剪刀石頭布”遊戲 132
第6章 泛型
6.1 泛型概述 134
6.2 實戰:泛型函數 134
6.2.1 全局泛型函數 135
6.2.2 局部泛型函數 136
6.2.3 泛型成員函數 136
6.2.4 靜態泛型函數 138
6.3 泛型接口 138
6.4 泛型類 139
6.5 實戰:泛型結構體 139
6.6 泛型枚舉 140
6.7 泛型類型的子類型關系 141
6.8 類型別名 141
6.9 泛型約束 142
6.10 總結 145
6.11 習題:動物發聲模擬器 145
第7章 集合類型
7.1 集合類型概述 147
7.2 實戰:使用ArrayList 147
7.2.1 ArrayList擴容原理 147
7.2.2 創建ArrayList 148
7.2.3 訪問ArrayList成員 148
7.2.4 修改ArrayList 149
7.2.5 增加ArrayList的大小 151
7.3 實戰:使用HashSet 152
7.3.1 創建HashSet 152
7.3.2 訪問HashSet成員 152
7.3.3 修改HashSet 153
7.4 實戰:使用HashMap 154
7.4.1 創建HashMap 154
7.4.2 訪問HashMap成員 155
7.4.3 修改HashMap 156
7.5 Iterable和Collections 158
7.6 總結 159
7.7 習題:名字的“漂亮度” 159
第8章 異常處理
8.1 定義異常 161
8.1.1 異常類 161
8.1.2 Exception和Error的主要函數及其說明 162
8.2 常見運行時異常 162
8.3 實戰:拋出和處理異常 163
8.3.1 拋出異常 163
8.3.2 普通try表達式 163
8.3.3 try-with-resources表達式 164
8.3.4 多個異常處理 165
8.4 使用Option 166
8.4.1 模式匹配 167
8.4.2 coalescing操作符“??” 167
8.4.3 問號操作符“?” 168
8.4.4 getOrThrow函數 169
8.5 總結 169
8.6 習題:“剪刀石頭布”遊戲的異常處理 169
第9章 包和模塊
9.1 包概述 172
9.2 包的聲明 172
9.3 頂層聲明的可見性 174
9.4 包的導入 175
9.4.1 使用import語句導入其他包中的聲明或定義 175
9.4.2 隱式導入core包 178
9.4.3 使用import as對導入的名字重命名 178
9.4.4 重導出一個導入的名字 180
9.5 程序入口 181
9.6 總結 182
9.7 習題:帶傳參的“名字的‘漂亮度’” 182
第10章 基礎I/O操作
10.1 I/O流概述 184
10.1.1 流的抽象 184
10.1.2 輸入流 184
10.1.3 輸出流 185
10.1.4 數據流分類 186
10.2 I/O節點流 186
10.2.1 標準流 186
10.2.2 文件流 187
10.3 I/O處理流 189
10.3.1 緩沖流 190
10.3.2 字符串流 191
10.4 實戰:讀寫文件 193
10.4.1 準備文件資源 193
10.4.2 讀取文件 193
10.4.3 寫入文件 194
10.5 總結 195
10.6 習題:獲取文件元數據 195
第11章 函數式編程
11.1 定義函數 197
11.1.1 參數列表 197
11.1.2 函數返回值類型 198
11.1.3 函數體 199
11.2 調用函數 200
11.3 函數類型 202
11.3.1 函數類型的常用示例 203
11.3.2 函數類型的類型參數 203
11.3.3 函數類型作為參數類型 204
11.3.4 函數類型作為返回類型 204
11.3.5 函數類型作為變量類型 204
11.4 Lambda表達式 205
11.4.1 Lambda表達式定義 205
11.4.2 Lambda表達式調用 207
11.5 閉包 207
11.6 函數調用語法糖 211
11.6.1 尾隨Lambda 211
11.6.2 Flow表達式 212
11.6.3 變長參數 213
11.7 函數重載 215
11.7.1 函數重載的類型 215
11.7.2 函數重載決議 218
11.8 const函數 219
11.9 實戰:詞頻統計 221
11.9.1 準備文件資源 221
11.9.2 統計詞頻函數 221
11.9.3 輸出詞頻函數 222
11.9.4 讀取文件統計詞頻 223
11.10 總結 224
11.11 習題:刪除字符串中出現次數最少的字符 224
第12章 並發編程
12.1 並發概述 226
12.1.1 線程與並發 226
12.1.2 並發與並行的區別 227
12.1.3 倉頡線程模型 227
12.2 創建線程 228
12.3 訪問線程 229
12.3.1 使用Future 229
12.3.2 訪問線程屬性 231
12.4 終止線程 232
12.5 同步機制 233
12.5.1 原子操作 233
12.5.2 可重入互斥鎖 236
12.5.3 Monitor 238
12.5.4 MultiConditionMonitor 241
12.5.5 synchronized關鍵字 244
12.5.6 線程局部變量ThreadLocal 246
12.6 線程睡眠 247
12.7 實戰:龜兔賽跑 248
12.7.1 應用概述 248
12.7.2 實現烏龜的邏輯 249
12.7.3 實現兔子的邏輯 249
12.7.4 線程執行 250
12.8 總結 252
12.9 習題:多窗口售票 252
第13章 宏編程
13.1 實戰:宏的入門 255
13.1.1 初始化應用 255
13.1.2 定義宏 255
13.1.3 定義main函數 256
13.2 Tokens相關類型和quote表達式 257
13.2.1 Token類型 257
13.2.2 Tokens類型 261
13.2.3 quote表達式和插值 262
13.3 語法節點 263
13.3.1 節點的解析 264
13.3.2 節點的組成部分 265
13.3.3 使用quote插值語法節點 267
13.4 宏的實現 269
13.4.1 非屬性宏 269
13.4.2 屬性宏 271
13.4.3 嵌套宏 273
13.5 編譯、報錯與調試 278
13.5.1 宏的編譯和使用 279
13.5.2 並行宏展開 280
13.5.3 diagReport報錯機制 281
13.5.4 使用--debug-macro輸出宏展開結果 282
13.6 宏包定義和導入 285
13.7 內置編譯標記 285
13.7.1 源碼位置 285
13.7.2 條件編譯 286
13.7.3 @FastNative 286
13.8 實戰:快速冪的計算 286
13.8.1 問題背景 287
13.8.2 實現宏@power 288
13.8.3 使用宏@power 289
13.9 總結 290
13.10 習題:多行dprint宏 290
第14章 網絡編程
14.1 網絡編程概述 292
14.2 Socket編程 292
14.2.1 了解TCP 293
14.2.2 了解Socket 293
14.2.3 了解UDP 294
14.2.4 TCP與UDP的區別 295
14.3 實戰:創建TCP和UDP服務器 295
14.3.1 創建TCP服務器 295
14.3.2 創建UDP服務器 296
14.4 HTTP編程 298
14.4.1 REST的定義 298
14.4.2 REST設計原則 299
14.4.3 REST成熟度模型 300
14.5 實戰:構建HTTP服務 306
14.5.1 構建Server實例 306
14.5.2 註冊請求處理邏輯 306
14.5.3 啟動服務器 307
14.5.4 運行 307
14.6 總結 308
14.7 習題:構建REST服務 308
第15章 CJPM包管理
15.1 CJPM基本使用方法 311
15.2 cjpm.toml配置文件說明 312
15.3 實戰:CJPM入門 313
15.3.1 創建項目目錄 314
15.3.2 使用CJPM初始化項目 314
15.3.3 使用CJPM運行項目 315
15.4 總結 315
15.5 習題:使用CJPM 315
第16章 自動化測試
16.1 單元測試 317
16.1.1 單元測試的概念 317
16.1.2 std.unittest包 317
16.1.3 實戰:編寫單元測試用例 318
16.2 Mocking測試 320
16.2.1 Mocking測試框架的概念 320
16.2.2 std.unittest.mock包 320
16.2.3 實戰:編寫Mocking測試用例 321
16.3 基準測試 324
16.4 總結 324
16.5 習題:累加器的性能測試 324
第17章 綜合實戰1:實現KV數據庫
17.1 KV數據庫概述 327
17.1.1 KV數據庫的基本概念 327
17.1.2 KV數據庫的特點 327
17.1.3 KV數據庫的工作原理 327
17.1.4 KV數據庫的應用場景 328
17.1.5 常見的KV數據庫實現 328
17.2 功能開發 330
17.2.1 創建項目 330
17.2.2 定義KeyValue接口 330
17.2.3 實現KeyValue接口 331
17.3 運行效果 332
17.4 總結 333
17.5 習題:實現KV數據庫 333
第18章 綜合實戰2:實現雪花算法
18.1 應用概述 335
18.1.1 雪花算法的整體設計 335
18.1.2 雪花算法的工作原理 335
18.1.3 雪花算法的特點 336
18.1.4 雪花算法的應用場景 336
18.1.5 雪花算法的優缺點 336
18.2 功能開發 337
18.2.1 創建項目 337
18.2.2 定義Snowflake類的變量 337
18.2.3 實現Snowflake構造函數 339
18.2.4 實現Snowflake生成下一個ID函數 339
18.3 運行效果 341
18.4 總結 343
18.5 習題:實現雪花算法 343
第19章 綜合實戰3:實現HarmonyOS瀑布流
19.1 應用概述 345
19.1.1 在ArkTS應用中開發倉頡模塊 345
19.1.2 在倉頡應用中使用ArkTS模塊 347
19.1.3 操作ArkTS數據 347
19.1.4 在ArkTS中操作倉頡對象 348
19.1.5 瀑布流概述 348
19.2 功能開發 349
19.2.1 選擇創建新項目 349
19.2.2 選擇模板 350
19.2.3 配置項目信息 351
19.2.4 自動生成工程代碼 351
19.2.5 代碼實現 352
19.3 運行效果 362
19.4 總結 364
19.5 習題:實現HarmonyOS瀑布流 364
附錄 關鍵字 365
參考文獻 366
