本書以倉頡編程語言為載體,是一本面向零基礎(chǔ)讀者的程序設(shè)計教材。通過閱讀本書,讀者可以掌握倉頡的基本語法,了解基礎(chǔ)的算法及計算思維,并通過書中大量的實踐案例,獲得將語法知識及算法理論應(yīng)用于工程實踐的切身體驗。本書以“知其然,更知其所以然”為理念,從計算機底層模型出發(fā),由淺入深,逐步構(gòu)建程序思維,在講解語法的同時,始終貫穿對程序運行本質(zhì)的剖析,幫助讀者建立扎實的計算機科學基礎(chǔ)及程序思維。本書可作為高等學校公共程序設(shè)計課程的教材,也可作為期望使用倉頡開發(fā)鴻蒙應(yīng)用的軟件工程師的參考用書。
本書特色:1.初學者可流暢閱讀和理解。編寫團隊耗費大量精力梳理與教學目標相關(guān)的知識體系,試圖構(gòu)造出一條曲折但暢通的學習路徑;刻意避開了簡單堆砌知識點的做法,而是通過科學的知識架構(gòu)和學習路徑設(shè)計,引導初學者在不斷的自我肯定中步步為營,勇往直前。2.內(nèi)容兼顧HOW&WHY。只有當讀者將抽象的語法與CPU、內(nèi)存層面的具體行為關(guān)聯(lián)起來時,才能真正理解語法本身。編寫團隊在書中設(shè)置了大量“知所以然”環(huán)節(jié),以幫助讀者建立對程序和計算思維的更深刻理解。程序設(shè)計能力訓練和軟件工程習慣養(yǎng)成并舉。編寫團隊力求在書中提供整齊有序、符合工程實踐規(guī)范的代碼示例,摒棄不規(guī)范的“教學代碼”風格,在潛移默化中向讀者傳遞“優(yōu)美、良好的編程風格”的理念。3.案例設(shè)計貼近工程實踐且富趣味性。書中的教學案例來自經(jīng)濟學、數(shù)學、管理學、醫(yī)學等眾多學科領(lǐng)域。期望通過對本書的學習,讀者可以獲得切實的通過程序設(shè)計解決實際工程問題的體驗。4.將算法之“鹽”融入語法之“水”。根據(jù)語法學習的需要,本書適當引入了一些算法和數(shù)據(jù)結(jié)構(gòu)示例,包括但不限于選擇排序、折半查找、散列數(shù)據(jù)結(jié)構(gòu)與遞歸等。此外,在這些示例的講授過程中,本書還力圖潛移默化地向讀者傳遞程序效率、計算復雜性、松散耦合等設(shè)計思想。5.本書的撰寫得到了華為公司倉頡語言生態(tài)與產(chǎn)業(yè)發(fā)展總監(jiān)王學智先生、華為基礎(chǔ)軟件人才發(fā)展總監(jiān)王景全先生、華為倉頡編程語言團隊技術(shù)劉俊杰先生的大力支持。6.配套教學資源豐富,除書中二維碼所提供的電子資源外,編者團隊將持續(xù)豐富本書配套的學習資源(在華為ICT學院及B站提供本書的視頻MOOC,在拼題A等平臺提供配套的在線評測習題集)。
書用文字寫就,軟件則由程序設(shè)計語言編寫。用造字的倉頡來命名由華為公司開發(fā)的先進編程語言,確實是一個富有文化底蘊和科技內(nèi)涵的選擇。這一命名既是對中華傳統(tǒng)文化的致敬,也彰顯了華為以創(chuàng)新連接過去與未來、推動數(shù)字文明發(fā)展的雄心。
隨著原生鴻蒙系統(tǒng)的正式發(fā)布,在操作系統(tǒng)這一重要的信息化基礎(chǔ)領(lǐng)域,自主可控的國產(chǎn)產(chǎn)品替代進程迎來拐點。不難預(yù)測,在未來數(shù)年中,搭載原生鴻蒙系統(tǒng)的計算機和移動終端的數(shù)量將迎來爆發(fā)式增長,海量的App將由Android、iOS和Windows遷移至鴻蒙系統(tǒng)。與之相適應(yīng),與鴻蒙應(yīng)用相關(guān)的工作崗位將呈現(xiàn)井噴式增長,形成全新的產(chǎn)業(yè)鏈和人才需求體系。作為為鴻蒙量身打造的全場景智能應(yīng)用編程語言,倉頡將在相關(guān)產(chǎn)業(yè)鏈中發(fā)揮關(guān)鍵作用。
身居高校的青年學生們學習和使用倉頡,正逢其時。而將倉頡廣泛地引入高等學校的教育體系,首先需要解決教材問題。我們合作編寫的這本教材,應(yīng)該是當前少有的由在職高校教師編寫,適用于高等學校課堂教學的倉頡語言教材(適用于倉頡LTS 1.0.0及更高版本)。本書編寫團隊得此機緣,將倉頡這門的語言推介給廣大高校學子和教學同行,深感榮幸。
全書共分15章:第1章介紹計算機的基本模型、倉頡語言及編譯器的基本概念、倉頡開發(fā)環(huán)境的搭建過程;第2 ~ 8章由淺及深、循序漸進地講授倉頡基礎(chǔ)編程知識,包括基本和復雜的數(shù)據(jù)類型,順序、分支以及循環(huán)的程序結(jié)構(gòu),面向過程、面向?qū)ο笠约昂瘮?shù)式程序設(shè)計方法;第9章討論容器;第10章討論泛型程序設(shè)計;第11章講授異常處理方法;第12章講授文件及I/O操作;第13章深度討論程序并發(fā)執(zhí)行的方法和原理;第14章從一個極其簡單的示例出發(fā),講授使用倉頡語言開發(fā)鴻蒙應(yīng)用的原理、過程及方法;第15章則更進一步,帶領(lǐng)讀者使用倉頡語言搭建一個基于鴻蒙的聊天機器人App,該App通過網(wǎng)絡(luò)與DeepSeek大語言模型進行交互。
筆者在重慶大學講授“程序設(shè)計基礎(chǔ)”“算法設(shè)計與分析”課程已近20年,在此期間,也一直以C、Python、Java等語言為工具,在醫(yī)療電子、工業(yè)自動化等領(lǐng)域進行程序設(shè)計實踐,未曾間斷;谶@些自認豐富的程序設(shè)計教學和實踐經(jīng)驗,編寫團隊試圖在本書中實現(xiàn)下述目標:
提供一本初學者可流暢閱讀和理解的教科書。編寫團隊耗費大量精力梳理與教學目標相關(guān)的知識體系,試圖構(gòu)造出一條曲折但暢通的學習路徑;刻意避開了簡單堆砌知識點的做法,而是通過科學的知識架構(gòu)和學習路徑設(shè)計,引導初學者在不斷的自我肯定中步步為營,勇往直前。
內(nèi)容兼顧HOW & WHY。只有當讀者將抽象的語法與CPU、內(nèi)存層面的具體行為關(guān)聯(lián)起來時,才能真正理解語法本身。編寫團隊在書中設(shè)置了大量“知所以然”環(huán)節(jié),以幫助讀者建立對程序和計算思維的更深刻理解。
程序設(shè)計能力訓練和軟件工程習慣養(yǎng)成并舉。編寫團隊力求在書中提供整齊有序、符合工程實踐規(guī)范的代碼示例,摒棄不規(guī)范的“教學代碼”風格,在潛移默化中向讀者傳遞“優(yōu)美、良好的編程風格”的理念。
案例設(shè)計貼近工程實踐且富趣味性。書中的教學案例來自經(jīng)濟學、數(shù)學、管理學、醫(yī)學等眾多學科領(lǐng)域。期望通過對本書的學習,讀者可以獲得切實的通過程序設(shè)計解決實際工程問題的體驗。
將算法之“鹽”融入語法之“水”。根據(jù)語法學習的需要,本書適當引入了一些算法和數(shù)據(jù)結(jié)構(gòu)示例,包括但不限于選擇排序、折半查找、散列數(shù)據(jù)結(jié)構(gòu)與遞歸等。此外,在這些示例的講授過程中,本書還力圖潛移默化地向讀者傳遞程序效率、計算復雜性、松散耦合等設(shè)計思想。
實踐是檢驗真理的優(yōu)質(zhì)標準。本書的實踐價值尚需同行和讀者們的實踐檢驗。編寫團隊雖盡心竭力,但水平有限,書中難免有疏漏之處,敬請讀者批評指正。
本書的撰寫得到了華為公司倉頡語言生態(tài)與產(chǎn)業(yè)發(fā)展總監(jiān)王學智先生、華為基礎(chǔ)軟件人才發(fā)展總監(jiān)王景全先生、華為倉頡編程語言團隊技術(shù)劉俊杰先生的大力支持,其中,劉俊杰先生向筆者提供了本書第15章示例的初始版本,王景全先生提供了國內(nèi)基礎(chǔ)軟件產(chǎn)業(yè)發(fā)展建議,在此表示感謝!
除書中二維碼所提供的電子資源外,編者團隊將持續(xù)豐富本書配套的學習資源(在華為ICT學院及B站提供本書的視頻MOOC,在拼題A等平臺提供配套的在線評測習題集),歡迎讀者朋友們檢索使用。
最后,懷著謙恭之心,誠邀高校教學同行加入我們的工作,共同把的國產(chǎn)語言和系統(tǒng)推介給青年學子。也期待第二本、第三本乃至無數(shù)本倉頡與鴻蒙教材面世,因為唯有百花齊放,方能成就產(chǎn)業(yè)的真正繁榮與長足發(fā)展。
陳 波
2025年6月于重慶大學虎溪校區(qū)
陳波,重慶大學計算機學院講師,艾爾曦醫(yī)療設(shè)備聯(lián)合創(chuàng)始人。在工程實踐方面,長期從事醫(yī)用電子儀器的研究和開發(fā),擅長應(yīng)用新的計算機理論及方法解決具體工程問題。在教學實踐方面,長期從事計算機程序設(shè)計課程的教學工作,擅長將工程實踐經(jīng)驗與教學相結(jié)合,著有《C++編程基礎(chǔ)及應(yīng)用》、《Python編程基礎(chǔ)及應(yīng)用》等高校教材。
第1章 學習準備 / 001
1.1 了解計算機 / 002
1.1.1 計算機的組成 / 002
1.1.2 內(nèi)存模型 / 003
1.2 倉頡語言及編譯器 / 004
1.3 倉頡編譯器的下載及安裝 / 005
1.4 優(yōu)質(zhì)個倉頡程序:學習倉頡,
擁抱未來 / 006
1.5 優(yōu)質(zhì)個倉頡項目:
世界,你好 / 008
第2章 計算及基本數(shù)據(jù)類型 / 010
2.1 main函數(shù) / 010
2.2 變量 / 011
2.3 整數(shù)類型 / 013
2.4 浮點數(shù)類型 / 019
2.5 數(shù)值計算 / 022
2.5.1 自增、自減、求余、
求冪 / 022
2.5.2 復合操作符 / 023
2.5.3 操作符優(yōu)先級 / 024
2.6 字符串 / 025
2.6.1 “單行”字符串 / 026
2.6.2 轉(zhuǎn)義符號 / 028
2.6.3 多行字符串 / 029
2.7 用戶輸入 / 030
2.8 格式化 / 032
2.9 常量 / 033
2.10 對象命名 / 034
2.11 實踐:雞兔同籠 / 035
2.12 小結(jié) / 036
第3章 程序結(jié)構(gòu)基礎(chǔ) / 038
3.1 條件分支 / 038
3.1.1 if語句 / 038
3.1.2 if-else語句 / 040
3.1.3 條件表達式 / 041
3.1.4 多分支選擇 / 043
3.2 模式匹配 / 046
3.2.1 不含選擇器的match
表達式 / 046
3.2.2 包含選擇器的match
表達式 / 048
3.3 布爾型 / 051
3.4 關(guān)系運算 / 052
3.5 使用庫函數(shù) / 055
3.6 自定義函數(shù) / 057
3.7 實踐:斷點調(diào)試觀察函數(shù)
調(diào)用 / 060
3.8 實踐:心靈感應(yīng)魔法 / 061
3.9 數(shù)組容器 / 064
3.10 實踐:鼠;⑼ / 066
3.11 構(gòu)造對象 / 067
3.12 小結(jié) / 068
第4章 循環(huán)之道 / 069
4.1 for循環(huán) / 069
4.2 實踐:斷點調(diào)試觀察程序
循環(huán) / 072
4.3 區(qū)間 / 073
4.4 實踐:滾雪球的復利 / 074
4.5 容器的遍歷 / 076
4.6 實踐:發(fā)現(xiàn)圓周率 / 077
4.7 實踐:質(zhì)數(shù)判定 / 079
4.8 while循環(huán) / 080
4.9 break—跳出循環(huán) / 082
4.10 實踐:九層之臺,
起于累土 / 084
4.11 算法:折半查找 / 086
4.12 do‐while循環(huán) / 089
4.13 continue—跳過當次循環(huán)/ 092
4.14 算法:選擇排序與雙重
循環(huán) / 094
4.15 小結(jié) / 098
第5章 自定義類型(上) / 099
5.1 定義新類型 / 099
5.2 對象構(gòu)造 / 101
5.3 主構(gòu)造函數(shù) / 104
5.4 成員函數(shù) / 105
5.5 終結(jié)器 / 109
5.6 靜態(tài)成員 / 110
5.7 小結(jié) / 113
第6章 高級數(shù)據(jù)類型及運算 / 115
6.1 字符 / 115
6.2 字符串進階 / 118
6.2.1 比較 / 118
6.2.2 運算 / 119
6.2.3 成員函數(shù) / 119
6.3 位運算 / 122
6.4 元組 / 123
6.5 枚舉 / 125
6.5.1 定義 / 125
6.5.2 枚舉對象匹配 / 126
6.5.3 成員函數(shù) / 128
6.6 Option / 130
6.7 實踐:市值排名 / 136
6.8 Unit類型 / 138
6.9 值與引用類型 / 139
6.10 引用與函數(shù) / 143
6.11 小結(jié) / 145
第7章 函數(shù)進階 / 146
7.1 函數(shù)的默認值 / 146
7.2 函數(shù)重載 / 148
7.3 變長參數(shù) / 150
7.4 實踐:啃不完的麻辣兔頭 / 151
7.5 對象作用域 / 154
7.6 遞歸 / 156
7.7 實踐:漢諾塔 / 158
7.8 算法:分而治之的奧秘* / 163
7.9 函數(shù)是一等公民 / 167
7.9.1 類型 / 167
7.9.2 作為變量值 / 168
7.9.3 作為實參 / 169
7.9.4 作為函數(shù)返回值 / 170
7.10 匿名函數(shù)/lambda表達式 / 173
7.11 嵌套函數(shù) / 175
7.12 閉包* / 177
7.13 操作符重載* / 183
7.13.1 加法(+)操作符 / 183
7.13.2 取反(–)操作符 / 187
7.13.3 索引([ ])操作符 / 187
7.14 流表達式* / 194
7.15 小結(jié) / 196
第8章 自定義類型(下) / 198
8.1 結(jié)構(gòu)體 / 198
8.2 屬性 / 202
8.3 訪問控制 / 205
8.4 繼承 / 207
8.5 多態(tài) / 212
8.6 抽象類 / 215
8.7 類型模式匹配 / 220
8.8 接口 / 222
8.9 擴展 / 225
8.9.1 直接擴展 / 225
8.9.2 接口擴展 / 226
8.10 小結(jié) / 227
第9章 容器 / 228
9.1 數(shù)組進階 / 229
9.1.1 切片 / 229
9.1.2 成員函數(shù) / 230
9.2 ArrayList / 232
9.2.1 創(chuàng)建 / 232
9.2.2 增刪元素 / 233
9.2.3 成員函數(shù) / 235
9.3 HashSet / 237
9.4 HashMap / 239
9.4.1 創(chuàng)建映射容器 / 240
9.4.2 鍵到值的映射 / 241
9.4.3 增刪鍵值對 / 244
9.4.4 遍歷 / 245
9.4.5 實踐:基尼系數(shù)與
貧富差距 / 246
9.5 小結(jié) / 249
第10章 泛型 / 250
10.1 泛型函數(shù) / 250
10.2 泛型類 / 253
10.3 泛型接口 / 255
10.3.1 Iterable / 255
10.3.2 Equatable、
Comparable / 258
10.4 高階泛型函數(shù)* / 259
10.4.1 forEach / 259
10.4.2 filter / 261
10.4.3 map / 263
10.4.4 reduce / 264
10.5 類型別名 / 267
10.6 小結(jié) / 268
第11章 異常處理* / 269
11.1 異常的發(fā)生 / 270
11.2 用Option處理失效 / 271
11.3 異常的捕獲及處理 / 272
11.4 自定義異常類型 / 274
11.5 try‐catch的嵌套 / 280
11.6 自動資源釋放 / 281
11.7 小結(jié) / 284
第12章 文件及I/O操作 / 285
12.1 文件及文件系統(tǒng) / 285
12.2 讀寫普通文本文件 / 288
12.3 讀寫逗號分隔值文件* / 294
12.4 二進制文件的讀寫 / 297
12.5 文件的隨機讀寫* / 302
12.6 讀寫復雜二進制文件* / 304
12.7 實踐:細胞計數(shù) / 310
12.7.1 從文件讀入二值化
矩陣 / 311
12.7.2 圖的寬度優(yōu)先遍歷 / 312
12.7.3 循環(huán)遍歷與搜索 / 315
12.8 小結(jié) / 317
第13章 程序的并發(fā)執(zhí)行 / 318
13.1 線程及分時系統(tǒng) / 318
13.2 主線程 / 320
13.3 線程的創(chuàng)建與使用 / 322
13.4 分而治之 / 325
13.5 訪問線程 / 327
13.6 終止線程 / 329
13.7 線程同步* / 331
13.7.1 同步計數(shù)器 / 331
13.7.2 數(shù)據(jù)競爭 / 334
13.7.3 原子操作 / 336
13.7.4 可重入互斥鎖 / 338
13.7.5 屏障 / 341
13.7.6 信號量 / 343
13.7.7 定時器 / 345
13.8 小結(jié) / 349
第14章 初探—倉頡開發(fā)鴻蒙
應(yīng)用 / 350
14.1 搭建開發(fā)環(huán)境 / 350
14.2 世界你好 / 351
14.2.1 創(chuàng)建項目 / 351
14.2.2 打開虛擬手機 / 352
14.2.3 部署并運行項目 / 354
14.2.4 修改主頁面 / 355
14.3 消息循環(huán) / 356
14.4 宏及領(lǐng)域?qū)S谜Z言 / 358
14.5 主頁面代碼解析 / 362
14.6 添加新頁面 / 366
14.7 Ability / 369
14.8 Stage框架 / 371
14.9 修改應(yīng)用名稱及圖標 / 372
14.10 小結(jié) / 373
第15章 再造輪子—DeepSeek
聊天機器人 / 375
15.1 界面及功能 / 375
15.2 數(shù)據(jù)結(jié)構(gòu) / 378
15.2.1 對話及輸入輸出
狀態(tài) / 378
15.2.2 State宏裝飾的其他
成員 / 380
15.2.3 消息列表 / 380
15.3 頁面結(jié)構(gòu) / 384
15.3.1 主體布局 / 384
15.3.2 標題欄 / 386
15.3.3 歡迎信息 / 387
15.3.4 輸入框 / 388
15.3.5 控制欄 / 389
15.3.6 自定義Switch組件 / 391
15.3.7 對話信息顯示框 / 392
15.4 功能函數(shù) / 395
15.4.1 更新輸入輸出狀態(tài) / 395
15.4.2 附加AI消息至消息
列表 / 395
15.4.3 停止對話 / 395
15.4.4 重置對話 / 396
15.4.5 執(zhí)行發(fā)送/停止功能 / 396
15.5 與DeepSeek大語言模型的
交互 / 399
15.5.1 robot對象及上下文 / 399
15.5.2 LLM構(gòu)造及成員變量 / 400
15.5.3 流式對話chat函數(shù) / 401
15.5.4 請求發(fā)送send函數(shù) / 404
15.5.5 應(yīng)答片段解析parse
函數(shù) / 405
15.5.6 上下文記錄record
函數(shù) / 405
15.5.7 其他成員函數(shù) / 406
15.6 小結(jié) / 406