基 础 篇
第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<T>作为函数的返回值 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<T>和Option<T>处理异常 308
9.2.1 使用Result<T>承载异常 308
9.2.2 Option<T>抛出异常 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<T>实现线程等待 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