本書是一本系統(tǒng)闡述倉頡程序設計語言的技術書籍,倉頡程序設計語言是一門由華為公司研發(fā)的國產計算機高級編程語言。
全書共15章,全書從最簡單的倉頡程序開始,全面覆蓋了倉頡程序設計語言的基本語法語義規(guī)則。第1章為引言,簡單介紹了倉頡語言的歷史和特點。第2章介紹了第1個倉頡程序。第3、4章介紹了倉頡語言的基本類型、運算符、基本輸入輸出和控制結構等。第5章介紹了函數(shù)。第6-9章介紹了倉頡語言中的高級類型和類型關系,包括記錄、枚舉、類、接口、繼承等。第10章介紹了泛型和常用集合,泛型是對類型的進一步抽象。第11章介紹了屬性和擴展。第12章介紹了多線程和異常處理,多線程為處理并發(fā)問題提供了基礎。第13章介紹了包,包管理為組織多文件及大型項目提供了機制保障。第14、15章是自動微分和元編程,自動微分為倉頡語言在人工智能應用中提供了更高的開發(fā)效率,元編程則使倉頡語言具有通過代碼生成代碼和修改代碼的能力。
本書在介紹倉頡語言特性的同時,配備了大量的示例代碼說明,使讀者在學習倉頡程序語言規(guī)則上更容易理解,書中示例代碼均進行過測試。
本書可作為開發(fā)者了解認識倉頡編程語言的入門書籍,可作為大學計算機、軟件專業(yè)相關課程的教材或參考書,還可作為倉頡程序設計工程師的參考書籍。
本書系統(tǒng)闡述倉頡程序設計語言,全書共15章,從最簡單的倉頡程序開始講解,全面覆蓋了倉頡程序設計語言的基本語法、語義及規(guī)則。本書在介紹倉頡語言特性的同時,配備了大量的示例代碼及說明,使讀者在學習倉頡程序語言規(guī)則上更容易理解。
深入淺出 介紹倉頡編程語言的基本理念、邏輯與體系,并在程序開發(fā)示例中加以驗證和說明。為讀者建立倉頡語言程序設計的技術體系,為開發(fā)者提供學習和開發(fā)參考。
技術前沿 帶領讀者走進倉頡程序設計語言,開啟程序設計語言國產化的新篇章,推動中國軟件開發(fā)在編程語言基礎領域自主創(chuàng)新。
中國華為技術有限公司發(fā)布倉頡程序設計語言恰逢我國近年來在高精尖及基礎領域受到國外擠壓的關鍵時期。作為軟件基礎領域的編程語言,國產化對我國軟件行業(yè)發(fā)展具有戰(zhàn)略意義。
倉頡程序設計語言的出現(xiàn),是華為技術有限公司基礎技術進一步提升的結果,也是我國多年來信息技術發(fā)展長期積淀的結果,更是國家發(fā)展戰(zhàn)略的需要。
倉頡程序設計語言作為一門新的程序設計語言,吸取了眾多其他編程語言的優(yōu)點,同時滿足編程語言在未來技術中的需要。倉頡語言在設計上把一些面向未來的技術作為語言本身的特性,如自動微分等。另外,倉頡語言還在不斷完善及發(fā)展的過程中,開發(fā)者需要用發(fā)展的眼光看待倉頡程序設計語言。
《倉頡程序設計語言》適合具有一定高級編程語言基礎的讀者,適合具有一定計算機或軟件開發(fā)基礎的大學生或軟件開發(fā)者閱讀!秱}頡程序設計語言》通過系統(tǒng)闡述和豐富的示例代碼幫助開發(fā)者快速掌握倉頡程序設計語言,開啟國產化程序設計的新天地。
《倉頡程序設計語言》主要內容
第1章 引言,簡要介紹倉頡程序設計語言的歷史和特點,說明《倉頡程序設計語言》面向的讀者。
第2章 第1個倉頡程序,介紹如何編寫倉頡Hello World程序,通過編譯、運行該程序說明倉頡程序的基本開發(fā)過程,本章還介紹倉頡程序包含的元素。
第3章 基本類型和運算符,介紹倉頡程序中的常量和變量,基本的數(shù)據(jù)類型,基本的算術運算符、關系運算符和邏輯運算符等。
第4章 基本輸入/輸出和控制結構,介紹倉頡語言中的基本輸出函數(shù)、終端輸入/輸出及其常用成員函數(shù)的使用、控制結構等。控制結構中包括順序、選擇和循環(huán)3種基本程序控制結構,分別介紹3種結構在倉頡程序中的具體表達。
第5章 函數(shù),介紹函數(shù)的定義、函數(shù)的調用和函數(shù)的高級特性。函數(shù)具有類型,可以作為參數(shù)傳遞或返回,并且可以嵌套。倉頡語言還支持Lambda表達式,相當于匿名函數(shù)。
第6章 結構和枚舉類型,介紹結構類型的定義、創(chuàng)建使用結構、結構成員和訪問控制等,以及枚舉類型的用法和倉頡語言內置的枚舉類型Option類型。
第7章 類和對象,介紹類的定義、對象的創(chuàng)建和使用、類的成員、可見性和寫限制,類是自定義的高級數(shù)據(jù)類型,是面向對象編程的基本概念,也是面向對象程序設計中基本特征封裝的具體實現(xiàn)。
第8章 繼承和接口,介紹通過繼承定義派生類、繼承中的構造函數(shù)、訪問權限、重載、覆蓋和重定義,以及接口的定義和繼承、接口的實現(xiàn)、Any接口。繼承是面向對象設計的基本特征之一,接口是類型中的更高層次抽象。
第9章 類型關系,介紹類和子類型、接口和子類型、函數(shù)使用中的子類型、類型轉換、類型判斷、類型別名。倉頡語言是強類型語言,類型關系在實際開發(fā)中發(fā)揮著重要的作用,子類型和父類型之間的隱性切換是面向對象多態(tài)性的具體體現(xiàn)。
第10章 泛型和常用集合,介紹泛型類型、泛型函數(shù)、泛型約束,以及常用的幾個集合類型,包括Array、ArrayList、HashSet、HashMap。泛型是一種類型參數(shù)化技術,提高了編寫程序的通用性。
第11章 屬性和擴展,介紹屬性的定義和使用、擴展的定義和使用。屬性提供了更加方便訪問程序的機制,擴展在不產生新類型的情況下為已有類型提供了擴充新功能的能力。
第12章 多線程和異常處理,多線程部分包括線程的創(chuàng)建、線程的等待和線程同步,異常處理部分包括異常類型、拋出和異常處理。
第13章 包,介紹包聲明、包中的可見性、包的導入、多包項目編譯、main函數(shù)參數(shù)等,多個包的組織和管理是完成大型項目所必需的,包管理為組織大型項目提供了有效的語言機制。
第14章 自動微分,首先簡要介紹微分技術,然后介紹倉頡語言中簡單的函數(shù)自動微分,最后介紹倉頡語言中的可微類型、可微函數(shù)、自動微分API、高階微分。倉頡語言把自動微分作為語言本身的基本特性進行設計,為倉頡語言應用在人工智能等領域提供了更好的支持。
第15章 元編程,首先簡要介紹元編程概念,然后介紹倉頡語言中的元編程類型、引述表達式、宏等。倉頡語言元編程使其具有通過代碼生成代碼和修改代碼的能力,元編程可以在編譯階段優(yōu)化生成運行效率更高的代碼。
閱讀建議
這是一本倉頡程序設計語言的入門書,但不是一本程序設計的入門書,因此筆者認為學習《倉頡程序設計語言》需要具備一定的程序設計基礎。
致謝
在《倉頡程序設計語言》的撰寫過程中,筆者得到了來自多方的支持和幫助,在這里特別表示感謝。
首先感謝家人的支持,如果沒有家人的支持,可能無法完成《倉頡程序設計語言》。
感謝中原工學院的同事,筆者在撰寫《倉頡程序設計語言》的過程中得到了多位領導和老師的支持、幫助,如余雨萍、李勇軍、張玉瑩、馬超凡、賈曉輝、朱彥松等。感謝研究生周鵬,在成書過程中和筆者共同學習、探討了倉頡程序設計語言。
感謝華為技術有限公司一大批優(yōu)秀的工程師,如果沒有他們的努力恐怕不會有倉頡編程語言的面世。在成書過程中筆者參考了華為技術有限公司提供的官方技術文檔。
感謝倉頡語言技術社區(qū)和社區(qū)里的眾多同人,在《倉頡程序設計語言》成稿過程中,社區(qū)提供了很好的交流平臺,通過和很多技術同人交流使筆者對倉頡語言有了更好、更深的理解。
感謝清華大學出版社工作人員的辛勤工作,特別感謝趙佳霓編輯,從策劃選題到出版的過程中付出了許多努力。
劉安戰(zhàn)
2024年5月
劉安戰(zhàn),華為認證HDE,中原工學院副教授、碩士生導師,國家認證高級系統(tǒng)分析師、系統(tǒng)架構設計師、信息系統(tǒng)項目管理師。主持完成 產學合作協(xié)同育人項目(HarmonyOS移動應用開發(fā)),率先在高校開設HarmonyOS開發(fā)類課程。參編國家十二五規(guī)劃教材1部,曾獲河南省軟件工程課程教學成果一等獎。
第1章 引言 1
1.1 倉頡語言的起源 1
1.2 倉頡語言的特點 1
1.3 本書面向的讀者 2
第2章 第1個倉頡程序 3
2.1 倉頡Hello World程序 3
2.2 編譯和運行 4
2.2.1 在Ubuntu系統(tǒng)下編譯運行 4
2.2.2 在Windows 10系統(tǒng)下開發(fā)倉頡程序 6
2.3 倉頡程序包含的元素 16
第3章 基本類型和運算符 18
3.1 常量和變量 18
3.1.1 常量 18
3.1.2 變量 21
3.2 數(shù)據(jù)類型 22
3.3 運算符 26
3.3.1 算術運算符 26
3.3.2 關系運算符 27
3.3.3 邏輯運算符 28
3.3.4 其他運算符 28
第4章 基本輸入/輸出和控制結構 31
4.1 基本輸出函數(shù) 31
4.2 終端輸入/輸出 32
4.2.1 終端輸入 33
4.2.2 終端輸出 34
4.3 控制結構 35
4.3.1 順序結構 35
4.3.2 選擇結構 36
4.3.3 循環(huán)結構 40
第5章 函數(shù) 46
5.1 函數(shù)定義 46
5.1.1 一般函數(shù)定義 46
5.1.2 嵌套函數(shù)定義 50
5.1.3 重載函數(shù)定義 51
5.2 函數(shù)調用 51
5.2.1 一般函數(shù)調用 52
5.2.2 遞歸函數(shù)調用 54
5.3 函數(shù)高級特性 55
5.3.1 函數(shù)類型 55
5.3.2 函數(shù)類型作為變量類型 56
5.3.3 函數(shù)類型作為返回類型 56
5.3.4 函數(shù)類型作為形參類型 57
5.3.5 Lambda表達式 57
第6章 結構和枚舉類型 59
6.1 結構類型 59
6.1.1 定義結構類型 59
6.1.2 創(chuàng)建使用結構 60
6.1.3 結構成員 61
6.1.4 訪問控制 66
6.1.5 結構定義限制 68
6.2 枚舉類型 69
6.2.1 枚舉類型的基本用法 69
6.2.2 枚舉類型的更多用法 72
6.2.3 Option類型 73
第7章 類和對象 76
7.1 定義類 76
7.2 創(chuàng)建使用類對象 77
7.3 類的成員 79
7.4 可見性和寫限制 85
第8章 繼承和接口 87
8.1 繼承 87
8.1.1 定義派生類 87
8.1.2 繼承中的構造函數(shù) 90
8.1.3 訪問權限 91
8.1.4 重載、覆蓋和重定義 93
8.2 接口 95
8.2.1 定義接口 95
8.2.2 接口繼承 97
8.2.3 接口實現(xiàn) 98
8.2.4 Any接口 100
第9章 類型關系 102
9.1 類和子類型 102
9.2 接口和子類型 103
9.3 函數(shù)使用中的子類型 104
9.4 類型轉換和類型判斷 106
9.4.1 數(shù)值類型之間的轉換 106
9.4.2 字符和整型之間的轉換 107
9.4.3 is和as表達式 107
9.5 類型別名 108
第10章 泛型和常用集合類型 110
10.1 泛型 110
10.1.1 泛型類型 110
10.1.2 泛型函數(shù) 114
10.1.3 泛型約束 116
10.2 常用集合類型 118
10.2.1 Array 119
10.2.2 ArrayList 121
10.2.3 HashSet 122
10.2.4 HashMap 124
第11章 屬性和擴展 126
11.1 屬性 126
11.1.1 定義屬性 126
11.1.2 使用屬性 129
11.2 擴展 131
11.2.1 擴展的定義 131
11.2.2 擴展限制和使用 133
11.2.3 擴展的作用域 135
第12章 多線程和異常處理 138
12.1 多線程 138
12.1.1 創(chuàng)建線程 138
12.1.2 等待線程 139
12.1.3 線程同步 141
12.2 異常處理 151
12.2.1 異常類型 152
12.2.2 拋出和處理異常 153
第13章 包 158
13.1 聲明包 158
13.2 包中頂層聲明的可見性 160
13.3 包的導入 162
13.4 多包項目編譯 165
13.5 main函數(shù)參數(shù) 168
第14章 自動微分 169
14.1 微分技術簡介 169
14.2 簡單的函數(shù)自動微分 170
14.3 可微類型 171
14.4 可微函數(shù) 172
14.4.1 頂層可微函數(shù) 172
14.4.2 非頂層可微函數(shù) 174
14.5 自動微分API 176
14.5.1 @Grad表達式 176
14.5.2 @ValWithGrad表達式 178
14.5.3 @AdjointOf表達式 178
14.5.4 stopGradient函數(shù)接口 179
14.6 高階微分 180
第15章 元編程 181
15.1 元編程簡介 181
15.2 元編程類型和引述表達式 182
15.2.1 Token類型 182
15.2.2 Tokens類型 183
15.2.3 引述表達式 185
15.3 宏 187
15.3.1 宏定義和調用 187
15.3.2 非屬性宏 188
15.3.3 屬性宏 189
15.3.4 宏嵌套 191
15.4 元編程示例 193
附錄A 倉頡語言中的關鍵字 196
附錄B 倉頡語言中的運算符 197
附錄C 倉頡語言提供的包及主要功能說明 199