图书目录

  

  

  

  

  

  

  

  

基  础  篇

第1章  仓颉语言介绍 3

1.1  仓颉语言的主要特征 3

1.2  仓颉语言的特点 4

1.3  仓颉语言对中国软件产业的价值 5

1.3.1  自研编程语言的价值 5

1.3.2  仓颉语言的价值 7

1.4  本章小结 8

第2章  安装与配置 9

2.1  Linux环境搭建(Ubuntu) 9

2.1.1  操作系统要求 9

2.1.2  仓颉工具链的安装 10

2.1.3  混合开发环境配置 11

2.2  Windows环境搭建 14

2.2.1  仓颉工具链的安装 14

2.2.2  安装CangjieStudio开发工具 14

2.3  第1个仓颉程序 20

2.3.1  创建项目目录 20

2.3.2  第1个“Hello, World!”程序 20

2.3.3  编译执行仓颉程序 21

2.4  本章小结 21

第3章  编程基础 22

3.1  程序结构 22

3.2  关键字 23

3.3  标识符 24

3.3.1  普通标识符 24

3.3.2  原始标识符 24

3.4  注释 25

3.4.1  单行注释 25

3.4.2  多行注释 25

3.5  变量和常量 26

3.5.1  定义变量 26

3.5.2  定义常量 27

3.5.3  作用域 27

3.5.4  初始化 28

3.6  代码编写规范 29

3.7  本章小结 30

第4章  数据类型 31

4.1  整数类型 31

4.1.1  整数类型的表示范围 31

4.1.2  整数类型的运算 32

4.2  浮点类型 36

4.3  布尔类型 38

4.4  字符类型 38

4.5  字符串类型 39

4.5.1  单行字符串 39

4.5.2  多行字符串 40

4.5.3  插值字符串 41

4.5.4  字符串操作 41

4.6  Unit类型 42

4.7  元组类型 42

4.7.1  元组定义 42

4.7.2  元组类型的字面量 42

4.8  区间类型 43

4.8.1  左闭右开区间 43

4.8.2  左闭右闭区间 43

4.9  Nothing类型 44

4.10  枚举类型 44

4.10.1  enum的定义和使用 44

4.10.2  enum值 45

4.10.3  enum的模式匹配 46

4.11  本章小结 47

第5章  类型转换 48

5.1  数值类型之间的转换 48

5.2  Char和UInt32之间的转换 49

5.3  is和as操作符 50

5.3.1  is操作符 50

5.3.2  as操作符 51

5.4  使用Convert库进行类型转换 51

5.4.1  字符串转布尔类型 51

5.4.2  字符串转整数类型 52

5.4.3  字符串转浮点类型 52

5.5  类型别名 52

5.6  本章小结 53

第6章  控制流 54

6.1  仓颉控制流介绍 54

6.2  if表达式 54

6.2.1  使用if和else 55

6.2.2  使用else if 56

6.2.3  if表达式的类型 56

6.3  循环表达式 58

6.3.1  for…in基本用法 58

6.3.2  while表达式 60

6.3.3  do…while表达式 62

6.3.4  break和continue表达式 63

6.4  本章小结 66

第7章  匹配模式 67

7.1  switch与match对比 67

7.2  match表达式 67

7.2.1  含待匹配值的match表达式 67

7.2.2  不含待匹配值的match表达式 70

7.2.3  match表达式的类型 70

7.3  匹配模型 71

7.3.1  常量模式 71

7.3.2  通配符模式 72

7.3.3  变量模式 72

7.3.4  元组模式 73

7.3.5  类模式 73

7.3.6  枚举模式 74

7.3.7  嵌套组合模式 76

7.4  模式的可反驳性 76

7.4.1  可反驳模式 77

7.4.2  不可反驳模式 77

7.5  本章小结 79

第8章  集合类型 80

8.1  集合类型介绍 80

8.2  Array 80

8.2.1  数组定义 81

8.2.2  访问数组成员 81

8.2.3  数组元素操作 83

8.2.4  多维数组 83

8.3  ArrayList 84

8.3.1  构造ArrayList 84

8.3.2  访问ArrayList成员 84

8.3.3  修改ArrayList 86

8.3.4  增加ArrayList的大小 88

8.4  HashSet 89

8.4.1  HashSet初始化 89

8.4.2  访问HashSet成员 89

8.4.3  HashSet操作 91

8.5  HashMap 92

8.5.1  HashMap初始化 92

8.5.2  访问HashMap成员 93

8.5.3  HashMap操作 94

8.6  本章小结 96

第9章  函数 97

9.1  函数定义 97

9.1.1  参数列表 97

9.1.2  函数返回值类型 99

9.1.3  函数体 100

9.1.4  函数变量作用域 101

9.1.5  函数体类型 101

9.2  函数类型 102

9.2.1  函数类型作为参数类型 102

9.2.2  函数类型作为返回类型 103

9.2.3  函数类型作为变量类型 103

9.3  嵌套函数 103

9.4  Lambda表达式 104

9.4.1  Lambda表达式定义 104

9.4.2  Lambda表达式调用 105

9.5  函数闭包 105

9.6  函数调用语法糖 106

9.6.1  尾随闭包 106

9.6.2  流表达式 107

9.7  函数重载 109

9.7.1  函数重载定义 109

9.7.2  函数重载决议 112

9.8  操作符重载 113

9.8.1  操作符重载函数定义和使用 114

9.8.2  可以被重载的操作符 115

9.9  mut函数 116

9.10  递归函数 117

9.11  本章小结 118

  

进  阶  篇

第10章  面向对象编程 121

10.1  面向对象程序设计 121

10.1.1  什么是面向对象编程 121

10.1.2  面向过程与面向对象 121

10.1.3  面向对象编程的特征 123

10.2  结构体(Struct) 125

10.2.1  如何选择结构体和类 125

10.2.2  定义结构体 126

10.2.3  构造函数 127

10.2.4  成员变量 129

10.2.5  成员函数 130

10.2.6  成员的可见修饰符 131

10.2.7  创建结构体实例 133

10.2.8  mut函数 134

10.3  类(Class) 135

10.3.1  定义类 136

10.3.2  构造函数 137

10.3.3  成员变量 140

10.3.4  成员函数 141

10.3.5  可见修饰符 142

10.3.6  prop属性 144

10.3.7  创建对象 147

10.4  抽象类(Abstract Class) 148

10.4.1  抽象类的作用 148

10.4.2  抽象类的定义 148

10.5  类的继承 149

10.5.1  类的继承条件 150

10.5.2  抽象属性和抽象函数 153

10.5.3  单继承 154

10.5.4  多态性 156

10.5.5  子类调用父类构造函数 156

10.5.6  覆盖和重定义 158

10.6  接口(Interface) 160

10.6.1  接口特点 160

10.6.2  接口定义 160

10.6.3  接口继承 164

10.6.4  接口实现 166

10.6.5  Any类型 168

10.7  面向对象案例:贪吃蛇游戏 169

10.7.1  设计类结构 169

10.7.2  创建项目 170

10.7.3  地图类实现 170

10.7.4  食物类实现 174

10.7.5  蛇类实现 176

10.7.6  玩家类实现 182

10.7.7  编译和运行 189

10.8  本章小结 190

第11章  泛型 191

11.1  泛型基础概念 191

11.2  泛型函数 192

11.2.1  全局泛型函数 192

11.2.2  局部泛型函数 194

11.2.3  泛型成员函数 194

11.2.4  静态泛型函数 195

11.3  泛型结构体 196

11.4  泛型类 197

11.5  泛型枚举 199

11.6  泛型的类型别名 200

11.7  泛型接口 200

11.7.1  泛型接口格式 200

11.7.2  定义生成器接口 201

11.7.3  定义数据库操作接口 202

11.8  泛型约束 203

11.8.1  接口约束 204

11.8.2  子类型约束 204

11.9  本章小结 205

第12章  扩展 206

12.1  扩展的定义 206

12.1.1  接口扩展 207

12.1.2  直接扩展 209

12.2  扩展的孤儿规则 210

12.3  扩展的访问和遮盖 211

12.4  扩展的导入导出 212

12.4.1  直接扩展的导入导出 213

12.4.2  接口扩展的导入导出 213

12.5  本章小结 215

第13章  错误处理 216

13.1  异常(Exception) 216

13.1.1  常见运行时异常 217

13.1.2  异常处理 218

13.2  Option类型用于错误处理 221

13.2.1  模式匹配 221

13.2.2  coalescing操作符(??) 222

13.2.3  问号操作符(?) 222

13.2.4  getOrThrow函数 223

13.3  本章小结 223

第14章  模块管理和包 224

14.1  仓颉包和模块介绍 224

14.2  模块管理工具 225

14.2.1  CPM常用命令 225

14.2.2  模块配置文件 227

14.3  包的定义 229

14.3.1  包的声明 229

14.3.2  包的成员 232

14.3.3  默认包 232

14.4  包之间相互调用 232

14.4.1  import语句 233

14.4.2  import as语句 233

14.5  本章小结 235

第15章  常用标准包 236

15.1  core包 237

15.2  random包 238

15.2.1  Random类 238

15.2.2  Random使用 238

15.3  time包 239

15.3.1  定时器 239

15.3.2  周期性定时器 240

15.3.3  获取时间的详细信息 240

15.3.4  同一时间在不同时区的墙上时间 241

15.3.5  从字符串中解析得到时间 242

15.4  os包 242

15.4.1  获取各类系统信息 243

15.4.2  文件内容相关操作 244

15.4.3  文件信息相关操作 245

15.4.4  进程相关信息操作 246

15.4.5  进程start及相关函数 247

15.5  io包 248

15.5.1  StringStream 249

15.5.2  FileStream 252

15.5.3  Console 254

15.6  log包 255

15.6.1  SimpleLogger 255

15.6.2  根据日志级别输到文件中 257

15.7  JSON包 258

15.7.1  JsonValue 259

15.7.2  JSON中转义字符处理 264

15.8  serialization包 265

15.8.1  Serializable 265

15.8.2  DataModel 266

15.8.3  DataModelStruct 267

15.8.4  HashSet和HashMap序列化 270

15.9  regex包 272

15.9.1  regex 272

15.9.2  Matcher 274

15.9.3  MatchData 277

15.9.4  RegexOption 279

15.10  url包 280

15.10.1  url包主要接口 280

15.10.2  URL 280

15.10.3  Form 281

15.11  本章小结 282

第16章  单元测试 283

16.1  什么是单元测试 283

16.2  修饰器宏介绍 284

16.3  编译与运行测试 284

16.4  修饰类的使用 286

16.4.1  @Test修饰器 286

16.4.2  @Test修饰Top-level函数的使用 288

16.5  自定义逻辑函数的使用 289

16.6  模块测试和包测试 291

16.7  本章小结 293

     

高  级  篇

第17章  跨语言互操作 297

17.1  与C语言互操作 297

17.1.1  仓颉调用C函数 297

17.1.2  仓颉与C类型映射 300

17.1.3  C调用仓颉函数 302

17.1.4  通过FFI操作SQLite数据库 303

17.1.5  通过FFI操作MongoDB数据库 309

17.2  与Python语言互操作 315

17.2.1  编译Python源码获取动态库 316

17.2.2  Python的动态库查找策略 317

17.2.3  Python库的导入和加载 317

17.2.4  PythonBuiltins内建函数类 319

17.2.5  仓颉与Python类型映射 322

17.2.6  仓颉与Python的注册回调 333

17.3  本章小结 337

第18章  并发编程 338

18.1  并发与并行 338

18.2  线程和多线程模型 339

18.3  创建一个仓颉线程 340

18.4  等待线程结束并获取返回值 341

18.4.1  getResult函数返回值 343

18.4.2  设置阻塞结果返回的时间 343

18.5  线程睡眠指定时长 344

18.6  线程的同步机制 344

18.6.1  原子操作 345

18.6.2  可重入互斥锁 348

18.6.3  Monitor 350

18.6.4  MultiConditionMonitor 352

18.6.5  synchronized关键字 354

18.7  本章小结 356

第19章  元编程 357

19.1  宏 358

19.1.1  宏的定义 358

19.1.2  宏的导入 359

19.1.3  非属性宏 360

19.1.4  属性宏 362

19.1.5  嵌套宏 364

19.2  Tokens 368

19.2.1  Token类型 368

19.2.2  Tokens类型 371

19.2.3  quote表达式 372

19.3  元编程案例 374

19.3.1  使用宏优化递归 374

19.3.2  使用宏打印任意类型 376

19.4  本章小结 379

第20章  网络编程 380

20.1  网络参考模型 380

20.1.1  OSI/RM参考模型 380

20.1.2  TCP/IP参考模型 381

20.2  TCP协议 384

20.2.1  TCP协议特点 384

20.2.2  TCP报文段 385

20.2.3  TCP工作流程 386

20.3  Socket编程 388

20.3.1  Socket概念 388

20.3.2  创建TCP服务器端 389

20.3.3  创建TCP客户端 391

20.4  Socket案例:多人聊天室 393

20.4.1  创建群聊服务器端 394

20.4.2  创建群聊客户端 399

20.5  HTTP协议 404

20.5.1  HTTP协议介绍 404

20.5.2  创建HTTP服务器端 406

20.5.3  创建HTTP客户端 411

20.6  HTTP案例:MVC博客 413

20.6.1  博客效果介绍 413

20.6.2  创建项目工程 415

20.6.3  创建博客服务器 416

20.6.4  创建页面控制器 417

20.6.5  创建数据层 419

20.6.6  创建数据服务层 423

20.6.7  实现数据加载与页面绑定 426

20.7  本章小结 432

附录A  操作符 433

  

IV

V