目录
目 录
第 1章 起步1
1.1 关于仓颉1
1.2 搭建开发环境1
1.3 我的第 一个仓颉程序1
第 2章 变量5
2.1 变量的声明5
2.1.1 在“第 一个”仓颉程序中声明
一个变量5
2.1.2 声明几个不同类型的变量6
2.1.3 在声明变量时缺省数据类型9
2.2 变量的使用9
2.2.1 读取变量值10
2.2.2 对可变变量进行赋值11
2.2.3 在赋值时避免类型错误14
第3章 简单的数据操作16
3.1 存储数值的数据类型16
3.1.1 认识整数类型16
3.1.2 整数类型可变变量的自增
和自减运算18
3.1.3 认识浮点类型18
3.1.4 数值类型的算术运算20
3.1.5 避免算术运算中的类型错误22
3.2 存储字符的数据类型25
3.2.1 使用字符类型存储单个字符26
3.2.2 使用字符串类型存储多个字符27
3.2.3 在输出字符串时使用换行符
和制表符29
3.2.4 拼接字符串31
3.2.5 使用插值字符串32
3.3 其他数据类型33
3.3.1 元组类型33
3.3.2 Unit和Nothing类型34
第4章 流程控制之if表达式37
4.1 条件测试37
4.1.1 比较数值类型数据的大小37
4.1.2 测试是否相等37
4.1.3 检查复杂的条件38
4.2 if表达式41
4.2.1 单分支的if表达式41
4.2.2 双分支的if表达式41
4.2.3 嵌套的if表达式45
第5章 流程控制之循环表达式49
5.1 do-while表达式49
5.1.1 使用do-while表达式输出1到10
之间的数49
5.1.2 使用do-while表达式计算
阶乘50
5.1.3 使用break表达式结束循环51
5.1.4 在循环中使用continue
表达式52
5.2 while表达式53
5.2.1 使用while表达式计算阶乘54
5.2.2 在循环中使用标志54
5.2.3 在while表达式中使用break
表达式和continue表达式55
5.3 for-in表达式56
5.3.1 了解区间类型57
5.3.2 使用for-in表达式计算阶乘58
5.3.3 使用where条件59
5.3.4 寻找最小公倍数60
5.4 循环表达式的嵌套61
5.4.1 寻找完全数62
5.4.2 寻找自除数63
第6章 函数初级67
6.1 函数的定义和调用67
6.1.1 一个简单的无参函数67
6.1.2 使用非命名参数68
6.1.3 使用命名参数71
6.1.4 使用return返回值73
6.1.5 了解函数的返回值类型76
6.2 函数的重载78
6.2.1 定义重载函数79
6.2.2 调用重载函数79
6.3 变量的作用域80
6.3.1 程序的基本结构80
6.3.2 全局变量的作用域82
6.3.3 局部变量的作用域82
6.3.4 同名变量83
第7章 面向对象编程86
7.1 类的定义和对象的创建86
7.1.1 定义类86
7.1.2 创建类的实例89
7.1.3 声明并使用静态成员变量90
7.1.4 定义并调用静态成员函数92
7.1.5 重载构造函数93
7.1.6 类是引用类型96
7.1.7 组织代码98
7.2 封装99
7.2.1 直接修改实例成员变量99
7.2.2 通过函数读写private实例成员
变量100
7.2.3 通过成员属性读写成员变量103
7.3 继承106
7.3.1 定义并继承父类106
7.3.2 创建新的子类109
7.3.3 重写和重定义111
7.3.4 使用组合实现代码复用114
7.4 多态116
7.4.1 将子类对象赋给父类类型的
变量116
7.4.2 通过继承实现多态117
7.5 抽象类119
7.5.1 将已有的类改造为抽象类120
7.5.2 通过抽象函数和抽象类实现
多态124
7.6 接口125
7.6.1 定义接口126
7.6.2 实现接口127
7.6.3 通过接口实现多态132
7.6.4 继承接口133
7.6.5 面向接口编程示例134
第8章 struct类型139
8.1 struct类型的定义和实例的
创建139
8.1.1 定义struct类型139
8.1.2 创建struct类型的实例
并访问其成员140
8.2 struct类型和class类型的
区别141
8.2.1 struct类型是值类型141
8.2.2 修改struct的实例成员143
第9章 enum类型和模式匹配145
9.1 enum类型的定义和enum值的
创建145
9.1.1 定义enum类型145
9.1.2 创建enum值147
9.2 enum值的模式匹配148
9.2.1 使用match表达式匹配
enum值148
9.2.2 了解另一种match表达式153
9.3 模式155
9.3.1 使用常量模式155
9.3.2 使用通配符模式157
9.3.3 使用绑定模式157
9.3.4 使用类型模式159
9.3.5 使用元组模式161
9.3.6 使用枚举模式162
9.3.7 判断模式的Refutability164
9.4 模式的其他用法166
9.4.1 在变量声明中使用irrefutable
模式166
9.4.2 在for-in表达式中使用irrefutable
模式168
9.4.3 在if-let表达式中使用模式169
9.4.4 在while-let表达式中使用
模式171
9.5 Option类型173
9.5.1 了解Option类型的定义173
9.5.2 创建Option值173
9.5.3 解构Option值175
9.5.4 使用as操作符进行类型
转换179
第 10章 函数高级184
10.1 函数是“一等公民”184
10.1.1 判断函数类型184
10.1.2 将函数作为变量值185
10.1.3 将函数作为实参186
10.1.4 将函数作为返回值187
10.2 lambda表达式189
10.2.1 定义lambda表达式189
10.2.2 使用lambda表达式190
10.2.3 比较lambda表达式和函数的
异同192
10.2.4 使用“尾随lambda”
语法糖194
10.3 嵌套函数和闭包195
10.3.1 定义和使用嵌套函数195
10.3.2 在闭包中捕获变量197
10.3.3 闭包的工作原理和特点200
10.4 再论重载函数202
10.4.1 函数重载决议202
10.4.2 对一元操作符进行重载205
10.4.3 对二元操作符进行重载207
10.5 mut函数208
10.5.1 在struct中使用mut函数209
10.5.2 在interface中使用mut
函数210
第 11章 基础Collection类型212
11.1 Array212
11.1.1 使用字面量创建Array212
11.1.2 使用构造函数创建Array213
11.1.3 获取Array的元素个数214
11.1.4 访问Array的元素215
11.1.5 修改Array的元素218
11.1.6 Array是引用类型220
11.2 ArrayList222
11.2.1 创建ArrayList222
11.2.2 访问和修改ArrayList的
元素223
11.2.3 向ArrayList中添加元素225
11.2.4 从ArrayList中删除元素227
11.3 HashSet230
11.3.1 创建HashSet230
11.3.2 访问HashSet的元素231
11.3.3 向HashSet中添加元素233
11.3.4 从HashSet中删除元素234
11.4 HashMap236
11.4.1 创建HashMap237
11.4.2 访问HashMap的元素238
11.4.3 向HashMap中添加元素
或修改元素241
11.4.4 从HashMap中删除元素243
第 12章 泛型246
12.1 泛型类型246
12.1.1 定义和使用泛型class247
12.1.2 定义和使用泛型struct251
12.1.3 定义和使用泛型enum252
12.1.4 定义和使用泛型interface253
12.2 泛型函数255
12.2.1 定义和调用泛型函数256
12.2.2 为泛型函数添加泛型约束257
第 13章 包管理259
13.1 包的声明259
13.1.1 工程的基本结构259
13.1.2 声明包260
13.2 顶层声明的可见性261
13.2.1 顶层声明的默认可见性261
13.2.2 顶层声明的public可见性262
13.3 顶层声明的导入265
13.3.1 使用import导入其他包中的
public顶层声明265
13.3.2 使用import as进行重命名268
13.3.3 使用public import对导入的
顶层声明重导出270
第 14章 扩展272
14.1 直接扩展和接口扩展272
14.1.1 定义和使用直接扩展272
14.1.2 定义和使用接口扩展275
14.1.3 扩展泛型类型278
14.2 扩展的导出和导入278
14.2.1 导出和导入直接扩展278
14.2.2 导出和导入接口扩展280
第 15章 数值和字符串操作283
15.1 生成随机数据283
15.1.1 生成各种类型的随机数据283
15.1.2 生成指定范围内的
随机整数284
15.1.3 复现随机数据285
15.1.4 生成随机数组286
15.2 通用的数学操作286
15.2.1 计算三角函数与双曲函数286
15.2.2 对浮点数取整288
15.2.3 其他数学操作289
15.3 格式化输出289
15.3.1 输出非负数时加上正号290
15.3.2 将整数类型输出为二、八、
十六进制290
15.3.3 使用科学记数法或十进制
表示浮点数291
15.3.4 控制浮点数的输出精度292
15.3.5 控制输出宽度292
15.4 字符串操作294
15.4.1 将字符串转换为字符数组294
15.4.2 统计和查找295
15.4.3 去除前缀和后缀296
15.4.4 替换子字符串297
15.4.5 分割和连接字符串298
15.4.6 大小写转换299
15.4.7 类型转换299
15.4.8 StringBuilder301