本书是一本系统阐述仓颉程序设计语言的技术书籍,仓颉程序设计语言是一门由华为公司研发的国产计算机高级编程语言。
全书共15章,全书从最简单的仓颉程序开始,全面覆盖了仓颉程序设计语言的基本语法语义规则。第1章为引言,简单介绍了仓颉语言的历史和特点。第2章介绍了第1个仓颉程序。第3、4章介绍了仓颉语言的基本类型、运算符、基本输入输出和控制结构等。第5章介绍了函数。第6-9章介绍了仓颉语言中的高级类型和类型关系,包括记录、枚举、类、接口、继承等。第10章介绍了泛型和常用集合,泛型是对类型的进一步抽象。第11章介绍了属性和扩展。第12章介绍了多线程和异常处理,多线程为处理并发问题提供了基础。第13章介绍了包,包管理为组织多文件及大型项目提供了机制保障。第14、15章是自动微分和元编程,自动微分为仓颉语言在人工智能应用中提供了更高的开发效率,元编程则使仓颉语言具有通过代码生成代码和修改代码的能力。
本书在介绍仓颉语言特性的同时,配备了大量的示例代码说明,使读者在学习仓颉程序语言规则上更容易理解,书中示例代码均进行过测试。
本书可作为开发者了解认识仓颉编程语言的入门书籍,可作为大学计算机、软件专业相关课程的教材或参考书,还可作为仓颉程序设计工程师的参考书籍。
本书系统阐述仓颉程序设计语言,全书共15章,从最简单的仓颉程序开始讲解,全面覆盖了仓颉程序设计语言的基本语法、语义及规则。本书在介绍仓颉语言特性的同时,配备了大量的示例代码及说明,使读者在学习仓颉程序语言规则上更容易理解。
深入浅出 介绍仓颉编程语言的基本理念、逻辑与体系,并在程序开发示例中加以验证和说明。为读者建立仓颉语言程序设计的技术体系,为开发者提供学习和开发参考。
技术前沿 带领读者走进仓颉程序设计语言,开启程序设计语言国产化的新篇章,推动中国软件开发在编程语言基础领域自主创新。
中国华为技术有限公司发布仓颉程序设计语言恰逢我国近年来在高精尖及基础领域受到国外挤压的关键时期。作为软件基础领域的编程语言,国产化对我国软件行业发展具有战略意义。
仓颉程序设计语言的出现,是华为技术有限公司基础技术进一步提升的结果,也是我国多年来信息技术发展长期积淀的结果,更是国家发展战略的需要。
仓颉程序设计语言作为一门新的程序设计语言,吸取了众多其他编程语言的优点,同时满足编程语言在未来技术中的需要。仓颉语言在设计上把一些面向未来的技术作为语言本身的特性,如自动微分等。另外,仓颉语言还在不断完善及发展的过程中,开发者需要用发展的眼光看待仓颉程序设计语言。
《仓颉程序设计语言》适合具有一定高级编程语言基础的读者,适合具有一定计算机或软件开发基础的大学生或软件开发者阅读。《仓颉程序设计语言》通过系统阐述和丰富的示例代码帮助开发者快速掌握仓颉程序设计语言,开启国产化程序设计的新天地。
《仓颉程序设计语言》主要内容
第1章 引言,简要介绍仓颉程序设计语言的历史和特点,说明《仓颉程序设计语言》面向的读者。
第2章 第1个仓颉程序,介绍如何编写仓颉Hello World程序,通过编译、运行该程序说明仓颉程序的基本开发过程,本章还介绍仓颉程序包含的元素。
第3章 基本类型和运算符,介绍仓颉程序中的常量和变量,基本的数据类型,基本的算术运算符、关系运算符和逻辑运算符等。
第4章 基本输入/输出和控制结构,介绍仓颉语言中的基本输出函数、终端输入/输出及其常用成员函数的使用、控制结构等。控制结构中包括顺序、选择和循环3种基本程序控制结构,分别介绍3种结构在仓颉程序中的具体表达。
第5章 函数,介绍函数的定义、函数的调用和函数的高级特性。函数具有类型,可以作为参数传递或返回,并且可以嵌套。仓颉语言还支持Lambda表达式,相当于匿名函数。
第6章 结构和枚举类型,介绍结构类型的定义、创建使用结构、结构成员和访问控制等,以及枚举类型的用法和仓颉语言内置的枚举类型Option类型。
第7章 类和对象,介绍类的定义、对象的创建和使用、类的成员、可见性和写限制,类是自定义的高级数据类型,是面向对象编程的基本概念,也是面向对象程序设计中基本特征封装的具体实现。
第8章 继承和接口,介绍通过继承定义派生类、继承中的构造函数、访问权限、重载、覆盖和重定义,以及接口的定义和继承、接口的实现、Any接口。继承是面向对象设计的基本特征之一,接口是类型中的更高层次抽象。
第9章 类型关系,介绍类和子类型、接口和子类型、函数使用中的子类型、类型转换、类型判断、类型别名。仓颉语言是强类型语言,类型关系在实际开发中发挥着重要的作用,子类型和父类型之间的隐性切换是面向对象多态性的具体体现。
第10章 泛型和常用集合,介绍泛型类型、泛型函数、泛型约束,以及常用的几个集合类型,包括Array、ArrayList、HashSet、HashMap。泛型是一种类型参数化技术,提高了编写程序的通用性。
第11章 属性和扩展,介绍属性的定义和使用、扩展的定义和使用。属性提供了更加方便访问程序的机制,扩展在不产生新类型的情况下为已有类型提供了扩充新功能的能力。
第12章 多线程和异常处理,多线程部分包括线程的创建、线程的等待和线程同步,异常处理部分包括异常类型、抛出和异常处理。
第13章 包,介绍包声明、包中的可见性、包的导入、多包项目编译、main函数参数等,多个包的组织和管理是完成大型项目所必需的,包管理为组织大型项目提供了有效的语言机制。
第14章 自动微分,首先简要介绍微分技术,然后介绍仓颉语言中简单的函数自动微分,最后介绍仓颉语言中的可微类型、可微函数、自动微分API、高阶微分。仓颉语言把自动微分作为语言本身的基本特性进行设计,为仓颉语言应用在人工智能等领域提供了更好的支持。
第15章 元编程,首先简要介绍元编程概念,然后介绍仓颉语言中的元编程类型、引述表达式、宏等。仓颉语言元编程使其具有通过代码生成代码和修改代码的能力,元编程可以在编译阶段优化生成运行效率更高的代码。
阅读建议
这是一本仓颉程序设计语言的入门书,但不是一本程序设计的入门书,因此笔者认为学习《仓颉程序设计语言》需要具备一定的程序设计基础。
致谢
在《仓颉程序设计语言》的撰写过程中,笔者得到了来自多方的支持和帮助,在这里特别表示感谢。
首先感谢家人的支持,如果没有家人的支持,可能无法完成《仓颉程序设计语言》。
感谢中原工学院的同事,笔者在撰写《仓颉程序设计语言》的过程中得到了多位领导和老师的支持、帮助,如余雨萍、李勇军、张玉莹、马超凡、贾晓辉、朱彦松等。感谢研究生周鹏,在成书过程中和笔者共同学习、探讨了仓颉程序设计语言。
感谢华为技术有限公司一大批优秀的工程师,如果没有他们的努力恐怕不会有仓颉编程语言的面世。在成书过程中笔者参考了华为技术有限公司提供的官方技术文档。
感谢仓颉语言技术社区和社区里的众多同人,在《仓颉程序设计语言》成稿过程中,社区提供了很好的交流平台,通过和很多技术同人交流使笔者对仓颉语言有了更好、更深的理解。
感谢清华大学出版社工作人员的辛勤工作,特别感谢赵佳霓编辑,从策划选题到出版的过程中付出了许多努力。
刘安战
2024年5月
刘安战,华为认证HDE,中原工学院副教授、硕士生导师,国家认证高级系统分析师、系统架构设计师、信息系统项目管理师。主持完成 产学合作协同育人项目(HarmonyOS移动应用开发),率先在高校开设HarmonyOS开发类课程。参编国家十二五规划教材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系统下编译运行 4
2.2.2 在Windows 10系统下开发仓颉程序 6
2.3 仓颉程序包含的元素 16
第3章 基本类型和运算符 18
3.1 常量和变量 18
3.1.1 常量 18
3.1.2 变量 21
3.2 数据类型 22
3.3 运算符 26
3.3.1 算术运算符 26
3.3.2 关系运算符 27
3.3.3 逻辑运算符 28
3.3.4 其他运算符 28
第4章 基本输入/输出和控制结构 31
4.1 基本输出函数 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 循环结构 40
第5章 函数 46
5.1 函数定义 46
5.1.1 一般函数定义 46
5.1.2 嵌套函数定义 50
5.1.3 重载函数定义 51
5.2 函数调用 51
5.2.1 一般函数调用 52
5.2.2 递归函数调用 54
5.3 函数高级特性 55
5.3.1 函数类型 55
5.3.2 函数类型作为变量类型 56
5.3.3 函数类型作为返回类型 56
5.3.4 函数类型作为形参类型 57
5.3.5 Lambda表达式 57
第6章 结构和枚举类型 59
6.1 结构类型 59
6.1.1 定义结构类型 59
6.1.2 创建使用结构 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 创建使用类对象 77
7.3 类的成员 79
7.4 可见性和写限制 85
第8章 继承和接口 87
8.1 继承 87
8.1.1 定义派生类 87
8.1.2 继承中的构造函数 90
8.1.3 访问权限 91
8.1.4 重载、覆盖和重定义 93
8.2 接口 95
8.2.1 定义接口 95
8.2.2 接口继承 97
8.2.3 接口实现 98
8.2.4 Any接口 100
第9章 类型关系 102
9.1 类和子类型 102
9.2 接口和子类型 103
9.3 函数使用中的子类型 104
9.4 类型转换和类型判断 106
9.4.1 数值类型之间的转换 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 泛型函数 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 创建线程 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函数参数 168
第14章 自动微分 169
14.1 微分技术简介 169
14.2 简单的函数自动微分 170
14.3 可微类型 171
14.4 可微函数 172
14.4.1 顶层可微函数 172
14.4.2 非顶层可微函数 174
14.5 自动微分API 176
14.5.1 @Grad表达式 176
14.5.2 @ValWithGrad表达式 178
14.5.3 @AdjointOf表达式 178
14.5.4 stopGradient函数接口 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