新書推薦:
《
希腊人(伊恩·莫里斯文明史系列)
》
售價:NT$
845.0
《
世界巨变:严复的角色(王中江著作系列)
》
售價:NT$
500.0
《
宋初三先生集(中国思想史资料丛刊)
》
售價:NT$
990.0
《
天生坏种:罪犯与犯罪心理分析
》
售價:NT$
445.0
《
新能源材料
》
售價:NT$
290.0
《
传统文化有意思:古代发明了不起
》
售價:NT$
199.0
《
亚述:世界历史上第一个帝国的兴衰
》
售價:NT$
490.0
《
人工智能与大数据:采煤机智能制造
》
售價:NT$
440.0
|
編輯推薦: |
本书全面地介绍了仓颉语言的语法和开发特性,通过大量应用案例帮助开发者快速掌握仓颉语言。本书共3篇20章(基础篇、进阶篇和高级篇),所有章节都提供了源代码,供读者下载学习。
|
內容簡介: |
本书是一本系统阐述仓颉程序设计语言的技术书籍,仓颉程序设计语言是一门由华为公司研发的国产计算机高级编程语言。
全仓颉语言作为新一代的面向应用的全场景编程语言,兼具开发效率和运行性能,并且有极强的领域扩展能力。仓颉语言在设计上广泛吸收和借鉴了现代编程语言特性,是首个面向全场景应用开发的通用编程语言。
本书全面介绍了仓颉语言的语法设计和应用开发,分为3篇共20章。基础篇(第1~9章)介绍仓颉语言的安装与开发环境搭建、数据类型、控制流、集合、函数式编程;进阶篇(第10~16章)介绍仓颉语言的面向对象编程、扩展、模块管理和包、标准包和单元测试;高级篇(第17~20章)介绍仓颉语言的元编程、跨语言编程并发编程和网络编程。
本书适用于对仓颉语言感兴趣的编程爱好者,也适用于在校计算机专业学生,本书可以作为仓颉语言学习者的入门参考书,也可以作为大专院校仓颉语言课程的学习教材。
|
關於作者: |
徐礼文,北京理工大学信息技术创新学院教研中心副主任、华为开发者专家(HDE)、开放原子开源基金会教育认证讲师、51CTO开源社区专家、润和软件社区专家、华为仓颉语言社区专家,华为仓颉语言最早期布道者和商业项目参与者。主要从事跨平台技术、人工智能、区块链,以及数字化架构方向的研究和技术指导工作,对国内外相关领域的技术、理论和实践有很深的理解和研究。
|
目錄:
|
基 础 篇
第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
|
內容試閱:
|
2021年中旬,华为杭州研究所内荷叶飘香,笔者受华为语言实验室项目经理王学智的邀请,全面深入地了解了仓颉语言的语言特性和设计细节。王学智作为华为仓颉语言的项目负责人,对语言底层认知的深度和广度使我印象深刻,他对自主研发编程语言的信心和热情,让我看到一个华为人的努力和担当。
2021年年底,仓颉语言在南京大学冯新宇教授的带领下已经完成了仓颉语言编译器和语法特性的设计,初步具备了商业应用的能力。与此同时,仓颉语言在华为公司内部的很多项目中已经得到小范围的使用。
2022年上半年,在华为仓颉语言团队的支持下,笔者的团队也开始参与到了仓颉语言微服务的项目开发。需要从零开始实现一个基于仓颉语言的微服务开发框架和构建一个新的基于仓颉语言的前端开发工具链。这是一次有趣的国产语言的开发探索之旅,虽然我们遇到了各种问题,但是最终在华为仓颉语言团队的支持下,完成了项目的开发和上线,成为首个在生产环境中使用仓颉语言的商用项目。
2024年6月,仓颉语言历经了5年来不断地优化和打磨,终于在华为开发者大会(HDC)上公开发布。仓颉语言是华为公司自主设计和研发的通用型编程语言,兼具了开发效率和运行性能,具有极强的领域扩展能力。仓颉语言在设计上广泛吸收和借鉴了现代编程语言的特性,是首个面向全场景应用开发的通用型编程语言。
仓颉语言的公开发布,对我国信息产业自主创新具有极其重要的推动作用。编程语言国产化对我国技术独立性、国家信息安全、技术创新、经济竞争力、人才培养和国际影响力等方面具有重要的价值。
HarmonyOS操作系统为开发者提供了耕种的土地环境,而仓颉语言为开发者提供了耕种的工具。正如华为消费者业务CEO余承东先生所说:“没有人能够熄灭满天星光,每位开发者都是华为要汇聚的星星之火,星星之火可以燎原。”仓颉语言需要聚集我们每位开发者的努力和贡献,以打造全新的、全场景的软硬件应用生态。
最后,由于仓颉语言的特性和标准库在不断迭代和改进中,本书中所采用的版本与实际公开的版本可能存有差异,读者可以本书作为参考,实际学习和开发中还需要参考最新的版本。扫描目录上方二维码,可下载本书源码。
致谢
感谢华为语言实验室仓颉语言项目经理王学智,仓颉基础库首席架构师杨海龙及其团队,在写作本书过程中,给予的极大帮助和支持,为写作本书提出了许多宝贵改进意见,同时感谢清华大学出版社赵佳霓编辑,为本书的出版提供的帮助和支持。
徐礼文
2024年6月
II
III
|
|