本书定位于仓颉语言的入门教程,成体系深入浅出地介绍仓颉语言应用开发的基础知识和常用标准库的使用方法,面向所有对仓颉语言的爱好者。
本书分为14章。第1~5章为基础篇,介绍仓颉语言的基本数据类型和基础语法。第6~12章为了提高篇,介绍自定义数据类型、集合类型的基本用法,面向对象编程、函数式编程等常用编程范式,以及文件读写和网络编程的基础知识。第13~14章为应用篇,介绍跨语言互操作、序列化等技术,并通过2个实战项目(网络聊天室、2048小游戏和博客网站)来带领读者亲身体验仓颉项目开发的全过程。
书中包含了310个实例、3个完整的仓颉项目,使读者在掌握理论知识的基础上掌握应用开发的基本流程。书中所有代码示例均在模拟器或真机上通过测试。
每章都有相应的教学课件,并且在章节的结尾处设置了几个用于巩固知识的习题,可以作为大学计算机、软件专业相关课程的教材或参考书,也可作为仓颉语言应用开发工程师的参考书籍。
仓颉语言融合了众多语言的优秀特性,优雅开放、全面易用,本书以通俗的文字介绍仓颉应用开发的核心知识,并详细剖析其特性。
● 全面、分步、详细地讲解仓颉语言的基本语法和实例用法;
● 配套14章教学课件、310个实例源代码,2个综合实战项目;
● 案例丰富,注释详尽,带领读者实现从0到1的突破。
仓颉造字是中国古代的一个神话传说。相传约5000年前,仓颉是黄帝身边负责记录农业生产和社会生活的史官,平时主要用结绳和刻木来记事,非常不方便。不过,仓颉有4只眼睛,比常人拥有更强的观察能力。为了记录方便,仓颉开始洞悉世事,观察日月星辰、山水草木,在兰陵县作字沟村(现山东省临沂市)将各种不同的事物进行了抽象,创造了最早的象形文字。《淮南子·本经训》记载:昔者仓颉作书,而天雨粟,鬼夜哭。仓颉造字惊天地泣鬼神,连下的雨落在了地上变成了谷子。这是二十四节气中谷雨的由来,可见仓颉在古代人民群众心中的地位。
如今,华为创造了仓颉编程语言,这无疑是中国软件行业的一件大事。仓颉语言的诞生将会为HarmonyOS、华为终端应用等层面提供强有力的支撑。回看过去,现代学者普遍认为仓颉造字并不是其一人所为,而是总结和整理了当时许多流传在民间的象形符号。华为的仓颉语言也是一样,需要开发者的共商共建,一同将仓颉语言推向新的高地。
学习仓颉语言是一件很浪漫的事!仓颉语言融合了众多语言的优秀特性,优雅开放、全面易用,不仅是资深工程师的进阶通道,也是菜鸟萌新的下饭菜。对!这是你的菜!希望读者能够保持对知识的渴望,就像谈恋爱一样保持初心、充满激情、共同成长。仓颉语言是一种静态强类型的编程语言,支持命令式、函数式和面向对象等多范式编程,不仅拥有类似Python语言的易用性,也拥有类似C语言的深邃和高效。
本书定位于仓颉语言的入门教程,成体系地介绍仓颉语言开发的基础知识,面向所有仓颉语言爱好者,希望能够以最通俗的文字介绍仓颉语言应用开发的核心知识。全书共14章。第1~5章为基础篇,介绍仓颉语言的基本数据类型和基本语法。学习任何编程语言都需要掌握这些概念。如果读者有其他编程语言的基础,则学习这一部分内容应该比较轻松。学习完成后,开发者可以实现比较简单的算法和应用程序。第6~12章为提高篇,介绍自定义数据类型和集合类型的基本用法,以及面向对象编程、函数式编程、元编程等高级用法,此外还介绍文件读写和网络编程的基础知识。通过对这部分知识的学习,开发者能够掌握仓颉语言中绝大部分的语法知识和标准库,可以开发一个比较完整的应用程序。第13、14章为应用篇,介绍跨语言互操作、序列化等技术,并通过两个实战项目(2048小游戏和博客网站)带领读者亲身体验仓颉语言项目开发的全过程。相信读者,通过本书的学习可以独立开发一个仓颉应用程序。
如果你是编程语言的初学者,则可以使用现有的仓颉语言编程环境,并且先跳过第1章的内容。因为第1章包含了许多晦涩的概念,搭建仓颉语言的开发环境也可能会占用很多精力。直接学习第2章能够直接接触仓颉语言的核心知识,并且会很容易带来成就感!本书所选用的仓颉版本为0.24.5版本。鉴于仓颉语言发展很快,一些概念和语法与最新版本可能会存在差异,建议读者选择和本书配套的版本学习。
在本书的著作过程中得到了华为公司官方的大力支持。感谢华为编程语言实验室仓颉编程语言项目经理王学智的帮助。感谢清华大学出版社赵佳霓编辑对本书的顺利出版所付出的辛勤劳动。感谢家人王娜、董沐宸松、董沐晨阳陪伴我的日日夜夜,你们是我坚强的后盾。虽然本书经过多次审查和校对,但是由于笔者水平有限,难免出现疏忽和问题。在仓颉开发的环境搭建方式等方面可能会随着仓颉语言的不断发展而出现一些变化,也许还存在一些问题和不顺手的地方需要调整。
本书包含310个实例、2个完整的仓颉项目和14章教学课件,可通过清华大学出版社随书提供的二维码扫码下载。
感谢大家对本书的支持和鼓励!祝愿大家身体健康,学有所获!
董昱
2024年5月
本书源代码 教学课件(PPT)
II
III
董昱,华为开发者专家(HUAWEI Developer Experts)、仓颉语言社区讲师(Cangjie Commumity Speaker)、仓颉库开发者(Cangjie Library Developer),首批仓颉语言开发者,在软件和算法设计等方面具有丰富的经验。
基 础 篇
第1章 认识新朋友仓颉语言 3
1.1 伟大的里程碑仓颉语言的诞生 3
1.1.1 编程语言简述 4
1.1.2 仓颉语言的历史机遇 5
1.1.3 仓颉语言的基本特性 6
1.2 仓颉语言的开发环境 10
1.2.1 编译环境的搭建 11
1.2.2 编辑环境的搭建 25
1.2.3 调试环境的搭建 28
1.3 本章小结 28
1.4 习题 29
第2章 仓颉语言初体验仓颉语言的基本语法 30
2.1 你好,仓颉! 30
2.1.1 第1个仓颉程序 31
2.1.2 仓颉语言的开发流程 33
2.1.3 语句和语句块 36
2.1.4 注释 38
2.2 变量和数据类型 38
2.2.1 变量与数据类型 39
2.2.2 通过整型学习变量的基本使用方法 42
2.2.3 浮点型的基本使用方法 44
2.2.4 变量的作用域 46
2.3 数值运算 47
2.3.1 操作符和表达式 47
2.3.2 整型的数值运算 48
2.3.3 浮点型的数值运算 51
2.3.4 数值的类型转换 52
2.3.5 复合表达式和括号表达式 53
2.3.6 数值运算实例演练 55
2.4 使用VSCode开发仓颉程序 57
2.5 本章小结 59
2.6 习题 59
第3章 结构化编程条件结构与循环结构 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 循环结构 91
3.4.1 区间类型和for in表达式 91
3.4.2 阶乘与复合赋值表达式 94
3.4.3 while表达式 96
3.4.4 do...while表达式 97
3.4.5 死循环 98
3.4.6 循环终止:break和continue 99
3.4.7 循环嵌套 101
3.5 本章小结 102
3.6 习题 103
第4章 让源代码整齐易读函数与模块化 105
4.1 函数 106
4.1.1 函数的定义和调用 106
4.1.2 函数的参数 110
4.1.3 命名参数的用法 113
4.1.4 函数的返回 115
4.1.5 使用元组模拟函数的多返回值 118
4.1.6 使用Option作为函数的返回值 120
4.1.7 主函数的返回值 123
4.2 函数的递归和重载 124
4.2.1 函数的递归 124
4.2.2 函数的重载 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 常数 139
4.4.2 常用数学函数 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 基本数据类型大家庭 175
5.5.1 Unit和Nothing 175
5.5.2 基本数据类型小结 176
5.6 本章小结 177
5.7 习题 178
提 高 篇
第6章 虚拟的小宇宙面向对象编程 181
6.1 封装 182
6.1.1 类与对象 183
6.1.2 构造函数 189
6.1.3 静态成员 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 多态 218
6.3.1 通过继承和重写实现多态 219
6.3.2 抽象类 220
6.4 接口和扩展 222
6.4.1 接口 222
6.4.2 通过接口实现多态 227
6.4.3 扩展 228
6.4.4 组合优于继承 231
6.5 本章小结 233
6.6 习题 233
第7章 类型的故事记录与类型系统 234
7.1 记录类型 234
7.1.1 记录及其构造函数 235
7.1.2 记录的实例 237
7.1.3 记录的成员函数与mut关键字 238
7.1.4 静态成员 240
7.1.5 成员的可见修饰符 242
7.2 值类型与引用类型 244
7.3 关于数据类型的高级操作 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章 同类数据排排队集合类型 266
8.1 有序集合类型 267
8.1.1 列表 267
8.1.2 数组 274
8.1.3 缓冲区 277
8.1.4 将字符串转换为数组 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章 用数学思维来编程函数式编程 347
10.1 函数类型及其用法 347
10.1.1 函数类型 348
10.1.2 Lambda表达式 350
10.1.3 闭包 352
10.1.4 嵌套函数 354
10.2 函数式编程 355
10.2.1 函数式编程中的函数和变量 355
10.2.2 柯里化与链式调用 356
10.2.3 高阶函数 362
10.3 泛型函数 366
10.4 尾随闭包 369
10.5 再探重载 372
10.5.1 函数重载的高级规则 372
10.5.2 操作符重载 376
10.6 本章小结 382
10.7 习题 382
第11章 让程序多姿多彩并发和网络编程 383
11.1 并发 383
11.1.1 仓颉线程的创建 384
11.1.2 通过Future实现线程等待 387
11.2 并发的同步机制 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 仓颉语言调用C语言函数 466
13.1.3 跨语言调用的高级用法 473
13.1.4 OS库的简单应用 475
13.2 随机数的生成和时间操作 480
13.3 2048小游戏 486
13.3.1 项目需求 486
13.3.2 实现思路 487
13.3.3 具体实现 488
13.4 本章小结 502
13.5 习题 502
第14章 用仓颉语言搭建博客网站 503
14.1 JSON数据与序列化 503
14.1.1 JSON数据的处理 504
14.1.2 序列化和反序列化 511
14.2 搭建博客网站 517
14.2.1 项目需求 517
14.2.2 用户界面层 519
14.2.3 数据访问层 524
14.2.4 业务逻辑层 529
14.3 本章小结 534
14.4 习题 534
附录A 仓颉语言中的关键字 535
附录B 仓颉语言的顶层定义 536
附录C 操作符及其优先级 537
附录D 标准库 539
附录E TokenKind枚举 540
IV
V