本書定位于倉頡語言的入門教程,成體系深入淺出地介紹倉頡語言應用開發(fā)的基礎知識和常用標準庫的使用方法,面向所有對倉頡語言的愛好者。
本書分為14章。第1~5章為基礎篇,介紹倉頡語言的基本數(shù)據(jù)類型和基礎語法。第6~12章為了提高篇,介紹自定義數(shù)據(jù)類型、集合類型的基本用法,面向對象編程、函數(shù)式編程等常用編程范式,以及文件讀寫和網(wǎng)絡編程的基礎知識。第13~14章為應用篇,介紹跨語言互操作、序列化等技術,并通過2個實戰(zhàn)項目(網(wǎng)絡聊天室、2048小游戲和博客網(wǎng)站)來帶領讀者親身體驗倉頡項目開發(fā)的全過程。
書中包含了310個實例、3個完整的倉頡項目,使讀者在掌握理論知識的基礎上掌握應用開發(fā)的基本流程。書中所有代碼示例均在模擬器或真機上通過測試。
每章都有相應的教學課件,并且在章節(jié)的結尾處設置了幾個用于鞏固知識的習題,可以作為大學計算機、軟件專業(yè)相關課程的教材或參考書,也可作為倉頡語言應用開發(fā)工程師的參考書籍。
倉頡語言融合了眾多語言的優(yōu)秀特性,優(yōu)雅開放、全面易用,本書以通俗的文字介紹倉頡應用開發(fā)的核心知識,并詳細剖析其特性。
● 全面、分步、詳細地講解倉頡語言的基本語法和實例用法;
● 配套14章教學課件、310個實例源代碼,2個綜合實戰(zhàn)項目;
● 案例豐富,注釋詳盡,帶領讀者實現(xiàn)從0到1的突破。
倉頡造字是中國古代的一個神話傳說。相傳約5000年前,倉頡是黃帝身邊負責記錄農(nóng)業(yè)生產(chǎn)和社會生活的史官,平時主要用結繩和刻木來記事,非常不方便。不過,倉頡有4只眼睛,比常人擁有更強的觀察能力。為了記錄方便,倉頡開始洞悉世事,觀察日月星辰、山水草木,在蘭陵縣作字溝村(現(xiàn)山東省臨沂市)將各種不同的事物進行了抽象,創(chuàng)造了最早的象形文字!痘茨献·本經(jīng)訓》記載:昔者倉頡作書,而天雨粟,鬼夜哭。倉頡造字驚天地泣鬼神,連下的雨落在了地上變成了谷子。這是二十四節(jié)氣中谷雨的由來,可見倉頡在古代人民群眾心中的地位。
如今,華為創(chuàng)造了倉頡編程語言,這無疑是中國軟件行業(yè)的一件大事。倉頡語言的誕生將會為HarmonyOS、華為終端應用等層面提供強有力的支撐;乜催^去,現(xiàn)代學者普遍認為倉頡造字并不是其一人所為,而是總結和整理了當時許多流傳在民間的象形符號。華為的倉頡語言也是一樣,需要開發(fā)者的共商共建,一同將倉頡語言推向新的高地。
學習倉頡語言是一件很浪漫的事!倉頡語言融合了眾多語言的優(yōu)秀特性,優(yōu)雅開放、全面易用,不僅是資深工程師的進階通道,也是菜鳥萌新的下飯菜。對!這是你的菜!希望讀者能夠保持對知識的渴望,就像談戀愛一樣保持初心、充滿激情、共同成長。倉頡語言是一種靜態(tài)強類型的編程語言,支持命令式、函數(shù)式和面向對象等多范式編程,不僅擁有類似Python語言的易用性,也擁有類似C語言的深邃和高效。
本書定位于倉頡語言的入門教程,成體系地介紹倉頡語言開發(fā)的基礎知識,面向所有倉頡語言愛好者,希望能夠以最通俗的文字介紹倉頡語言應用開發(fā)的核心知識。全書共14章。第1~5章為基礎篇,介紹倉頡語言的基本數(shù)據(jù)類型和基本語法。學習任何編程語言都需要掌握這些概念。如果讀者有其他編程語言的基礎,則學習這一部分內(nèi)容應該比較輕松。學習完成后,開發(fā)者可以實現(xiàn)比較簡單的算法和應用程序。第6~12章為提高篇,介紹自定義數(shù)據(jù)類型和集合類型的基本用法,以及面向對象編程、函數(shù)式編程、元編程等高級用法,此外還介紹文件讀寫和網(wǎng)絡編程的基礎知識。通過對這部分知識的學習,開發(fā)者能夠掌握倉頡語言中絕大部分的語法知識和標準庫,可以開發(fā)一個比較完整的應用程序。第13、14章為應用篇,介紹跨語言互操作、序列化等技術,并通過兩個實戰(zhàn)項目(2048小游戲和博客網(wǎng)站)帶領讀者親身體驗倉頡語言項目開發(fā)的全過程。相信讀者,通過本書的學習可以獨立開發(fā)一個倉頡應用程序。
如果你是編程語言的初學者,則可以使用現(xiàn)有的倉頡語言編程環(huán)境,并且先跳過第1章的內(nèi)容。因為第1章包含了許多晦澀的概念,搭建倉頡語言的開發(fā)環(huán)境也可能會占用很多精力。直接學習第2章能夠直接接觸倉頡語言的核心知識,并且會很容易帶來成就感!本書所選用的倉頡版本為0.24.5版本。鑒于倉頡語言發(fā)展很快,一些概念和語法與最新版本可能會存在差異,建議讀者選擇和本書配套的版本學習。
在本書的著作過程中得到了華為公司官方的大力支持。感謝華為編程語言實驗室倉頡編程語言項目經(jīng)理王學智的幫助。感謝清華大學出版社趙佳霓編輯對本書的順利出版所付出的辛勤勞動。感謝家人王娜、董沐宸松、董沐晨陽陪伴我的日日夜夜,你們是我堅強的后盾。雖然本書經(jīng)過多次審查和校對,但是由于筆者水平有限,難免出現(xiàn)疏忽和問題。在倉頡開發(fā)的環(huán)境搭建方式等方面可能會隨著倉頡語言的不斷發(fā)展而出現(xiàn)一些變化,也許還存在一些問題和不順手的地方需要調(diào)整。
本書包含310個實例、2個完整的倉頡項目和14章教學課件,可通過清華大學出版社隨書提供的二維碼掃碼下載。
感謝大家對本書的支持和鼓勵!祝愿大家身體健康,學有所獲!
董昱
2024年5月
本書源代碼 教學課件(PPT)
II
III
董昱,華為開發(fā)者專家(HUAWEI Developer Experts)、倉頡語言社區(qū)講師(Cangjie Commumity Speaker)、倉頡庫開發(fā)者(Cangjie Library Developer),首批倉頡語言開發(fā)者,在軟件和算法設計等方面具有豐富的經(jīng)驗。
基 礎 篇
第1章 認識新朋友倉頡語言 3
1.1 偉大的里程碑倉頡語言的誕生 3
1.1.1 編程語言簡述 4
1.1.2 倉頡語言的歷史機遇 5
1.1.3 倉頡語言的基本特性 6
1.2 倉頡語言的開發(fā)環(huán)境 10
1.2.1 編譯環(huán)境的搭建 11
1.2.2 編輯環(huán)境的搭建 25
1.2.3 調(diào)試環(huán)境的搭建 28
1.3 本章小結 28
1.4 習題 29
第2章 倉頡語言初體驗倉頡語言的基本語法 30
2.1 你好,倉頡! 30
2.1.1 第1個倉頡程序 31
2.1.2 倉頡語言的開發(fā)流程 33
2.1.3 語句和語句塊 36
2.1.4 注釋 38
2.2 變量和數(shù)據(jù)類型 38
2.2.1 變量與數(shù)據(jù)類型 39
2.2.2 通過整型學習變量的基本使用方法 42
2.2.3 浮點型的基本使用方法 44
2.2.4 變量的作用域 46
2.3 數(shù)值運算 47
2.3.1 操作符和表達式 47
2.3.2 整型的數(shù)值運算 48
2.3.3 浮點型的數(shù)值運算 51
2.3.4 數(shù)值的類型轉換 52
2.3.5 復合表達式和括號表達式 53
2.3.6 數(shù)值運算實例演練 55
2.4 使用VSCode開發(fā)倉頡程序 57
2.5 本章小結 59
2.6 習題 59
第3章 結構化編程條件結構與循環(huán)結構 61
3.1 邏輯運算與關系運算 61
3.1.1 布爾類型 61
3.1.2 邏輯運算 62
3.1.3 關系運算 64
3.2 if表達式 66
3.2.1 if結構 67
3.2.2 if-else結構 68
3.2.3 if表達式的嵌套和else if結構 70
3.2.4 if表達式的值 74
3.3 match表達式與枚舉類型 76
3.3.1 match表達式 76
3.3.2 枚舉類型enum 84
3.3.3 枚舉類型的帶參構造器 88
3.4 循環(huán)結構 91
3.4.1 區(qū)間類型和for in表達式 91
3.4.2 階乘與復合賦值表達式 94
3.4.3 while表達式 96
3.4.4 do...while表達式 97
3.4.5 死循環(huán) 98
3.4.6 循環(huán)終止:break和continue 99
3.4.7 循環(huán)嵌套 101
3.5 本章小結 102
3.6 習題 103
第4章 讓源代碼整齊易讀函數(shù)與模塊化 105
4.1 函數(shù) 106
4.1.1 函數(shù)的定義和調(diào)用 106
4.1.2 函數(shù)的參數(shù) 110
4.1.3 命名參數(shù)的用法 113
4.1.4 函數(shù)的返回 115
4.1.5 使用元組模擬函數(shù)的多返回值 118
4.1.6 使用Option作為函數(shù)的返回值 120
4.1.7 主函數(shù)的返回值 123
4.2 函數(shù)的遞歸和重載 124
4.2.1 函數(shù)的遞歸 124
4.2.2 函數(shù)的重載 126
4.3 組織源代碼 128
4.3.1 多文件編譯 129
4.3.2 包 131
4.3.3 模塊 135
4.3.4 庫 138
4.4 math標準庫 139
4.4.1 常數(shù) 139
4.4.2 常用數(shù)學函數(shù) 142
4.5 本章小結 144
4.6 習題 144
第5章 處理文本字符與字符串 145
5.1 字符和字符編碼 145
5.1.1 字符集和字符編碼 146
5.1.2 字符 147
5.1.3 字符串 150
5.2 操作字符串 153
5.2.1 字符串的長度和索引 153
5.2.2 字符串的關系運算 156
5.2.3 字符串的包含關系 157
5.2.4 裁剪和連接 158
5.2.5 字符串的高級操作 160
5.2.6 Unicode標準庫 162
5.3 字符串的類型轉換 166
5.3.1 字符串類型轉換的基本思路 166
5.3.2 格式化轉換 167
5.3.3 字符串型轉其他類型 172
5.4 字符和碼點值的轉換 174
5.5 基本數(shù)據(jù)類型大家庭 175
5.5.1 Unit和Nothing 175
5.5.2 基本數(shù)據(jù)類型小結 176
5.6 本章小結 177
5.7 習題 178
提 高 篇
第6章 虛擬的小宇宙面向對象編程 181
6.1 封裝 182
6.1.1 類與對象 183
6.1.2 構造函數(shù) 189
6.1.3 靜態(tài)成員 193
6.1.4 屬性 197
6.2 繼承 203
6.2.1 類的繼承 203
6.2.2 重寫和重定義 205
6.2.3 成員的可見修飾符 213
6.2.4 單例類 215
6.2.5 轉型 216
6.3 多態(tài) 218
6.3.1 通過繼承和重寫實現(xiàn)多態(tài) 219
6.3.2 抽象類 220
6.4 接口和擴展 222
6.4.1 接口 222
6.4.2 通過接口實現(xiàn)多態(tài) 227
6.4.3 擴展 228
6.4.4 組合優(yōu)于繼承 231
6.5 本章小結 233
6.6 習題 233
第7章 類型的故事記錄與類型系統(tǒng) 234
7.1 記錄類型 234
7.1.1 記錄及其構造函數(shù) 235
7.1.2 記錄的實例 237
7.1.3 記錄的成員函數(shù)與mut關鍵字 238
7.1.4 靜態(tài)成員 240
7.1.5 成員的可見修飾符 242
7.2 值類型與引用類型 244
7.3 關于數(shù)據(jù)類型的高級操作 246
7.3.1 再探接口與Any類型 247
7.3.2 子類型關系 250
7.3.3 類型判斷 251
7.3.4 類型轉換 253
7.3.5 類型別名 255
7.4 泛型 255
7.4.1 泛型的基本用法 256
7.4.2 泛型約束 262
7.5 本章小結 265
7.6 習題 265
第8章 同類數(shù)據(jù)排排隊集合類型 266
8.1 有序集合類型 267
8.1.1 列表 267
8.1.2 數(shù)組 274
8.1.3 緩沖區(qū) 277
8.1.4 將字符串轉換為數(shù)組 281
8.1.5 多維有序集合 282
8.2 無序集合類型 284
8.2.1 HashSet 285
8.2.2 HashMap 290
8.3 迭代器 294
8.4 本章小結 296
8.5 習題 296
第9章 讀寫文件異常處理與輸入輸出 298
9.1 異常處理 298
9.1.1 異常 299
9.1.2 捕獲異常 299
9.1.3 拋出異常 304
9.1.4 自定義異常 307
9.2 使用Result和Option處理異常 308
9.2.1 使用Result承載異常 308
9.2.2 Option拋出異常 312
9.3 輸入與輸出 313
9.3.1 文件信息類和目錄信息類 314
9.3.2 字符流 315
9.3.3 文件流 321
9.4 位運算與文本文件的讀寫 327
9.4.1 位運算 327
9.4.2 讀寫文本文件 332
9.5 標準輸入和正則表達式 337
9.5.1 標準輸入 337
9.5.2 正則表達式的基本用法 338
9.5.3 模擬用戶登錄 343
9.6 本章小結 345
9.7 習題 345
第10章 用數(shù)學思維來編程函數(shù)式編程 347
10.1 函數(shù)類型及其用法 347
10.1.1 函數(shù)類型 348
10.1.2 Lambda表達式 350
10.1.3 閉包 352
10.1.4 嵌套函數(shù) 354
10.2 函數(shù)式編程 355
10.2.1 函數(shù)式編程中的函數(shù)和變量 355
10.2.2 柯里化與鏈式調(diào)用 356
10.2.3 高階函數(shù) 362
10.3 泛型函數(shù) 366
10.4 尾隨閉包 369
10.5 再探重載 372
10.5.1 函數(shù)重載的高級規(guī)則 372
10.5.2 操作符重載 376
10.6 本章小結 382
10.7 習題 382
第11章 讓程序多姿多彩并發(fā)和網(wǎng)絡編程 383
11.1 并發(fā) 383
11.1.1 倉頡線程的創(chuàng)建 384
11.1.2 通過Future實現(xiàn)線程等待 387
11.2 并發(fā)的同步機制 389
11.2.1 互斥鎖 391
11.2.2 原子操作 398
11.3 Socket通信 404
11.3.1 使用Socket通信 404
11.3.2 群聊應用程序 410
11.4 HTTP服務器和客戶端 416
11.4.1 HTTP服務器 416
11.4.2 處理HTTP請求 423
11.4.3 HTTP客戶端 433
11.4.4 Cookie和CookieJar 436
11.5 本章小結 442
11.6 習題 442
第12章 關于編程的編程元編程 443
12.1 詞法分析和語法分析 443
12.1.1 詞法分析和詞法單元 443
12.1.2 詞法單元 445
12.1.3 詞法單元序列 446
12.1.4 quote表達式 447
12.1.5 抽象語法樹 449
12.2 宏 454
12.2.1 非屬性宏 455
12.2.2 屬性宏 459
12.2.3 宏展開 460
12.3 本章小結 461
12.4 習題 461
應 用 篇
第13章 跨語言互操作和2048小游戲 465
13.1 跨語言互操作 465
13.1.1 倉頡語言和C語言的類型映射關系 465
13.1.2 倉頡語言調(diào)用C語言函數(shù) 466
13.1.3 跨語言調(diào)用的高級用法 473
13.1.4 OS庫的簡單應用 475
13.2 隨機數(shù)的生成和時間操作 480
13.3 2048小游戲 486
13.3.1 項目需求 486
13.3.2 實現(xiàn)思路 487
13.3.3 具體實現(xiàn) 488
13.4 本章小結 502
13.5 習題 502
第14章 用倉頡語言搭建博客網(wǎng)站 503
14.1 JSON數(shù)據(jù)與序列化 503
14.1.1 JSON數(shù)據(jù)的處理 504
14.1.2 序列化和反序列化 511
14.2 搭建博客網(wǎng)站 517
14.2.1 項目需求 517
14.2.2 用戶界面層 519
14.2.3 數(shù)據(jù)訪問層 524
14.2.4 業(yè)務邏輯層 529
14.3 本章小結 534
14.4 習題 534
附錄A 倉頡語言中的關鍵字 535
附錄B 倉頡語言的頂層定義 536
附錄C 操作符及其優(yōu)先級 537
附錄D 標準庫 539
附錄E TokenKind枚舉 540
IV
V