内容简介
仓颉编程语言(简称“仓颉”)是全场景应用开发语言,具有强类型、空安全、高效开发、高性能和易学习等优点。在本书中,作者通过丰富的思维导图、流程图、类图、时序图等图解方式,辅以作者总结的使用仓颉开发的心得和官方文档未曾提及的诸多细节,完整展示了仓颉的各种特性和重难点。
本书第一作者受邀参加“2024华为开发者年度盛典”并荣获“社区价值贡献奖”,有丰富的Java、C等传统编程语言开发经验,书中代码是多年开发经验的总结,作者选取工作中常见和常用的案例和开发框架,用仓颉重新实现它们,并将其运用到仓颉开发当中。这些代码可操作性极强,读者可以基于书中代码实例加以扩展、增强,进而实现自己的开发框架和工具库。
随书附赠完整可运行的案例代码(均配有实际项目代码库)、授课用PPT课件、进阶学习视频(扫码观看),以及作者设计的应用仓颉开发服务器的工具库等海量学习资源。同时,考虑集合和IO两个模块并没有难以理解或者容易用错的API,基本是重复标准库文档,因此为节约读者学习时间和购书成本,这部分内容以电子书形式提供。以上资源获取方式见本书封底文字说明。
本书适合渴望了解仓颉或需要使用仓颉做开发工作的人群阅读。对于已经掌握数据结构和任意一种编程语言的读者,阅读本书将毫不费力;而对于零基础的读者,也不必过于担心,书中对涉及的技术知识均进行了详细介绍,不会存在阅读障碍。
目录
推荐序1
推荐序2
推荐序3
前言
第1章 关于仓颉
1.1仓颉语言的特性
1.2仓颉程序开发环境
1.2.1Windows版仓颉SDK
1.2.2Linux版仓颉SDK
1.2.3macOS版仓颉SDK
1.3安装依赖工具
1.3.1安装Linux版OpenSSL3
1.3.2安装Windows版OpenSSL3
1.3.3安装macOS版OpenSSL3
1.4安装集成开发环境
1.5仓颉文档
1.6仓颉的官方网站
1.7第一个仓颉应用程序
1.8本章知识点总结和思维导图
第2章 数据类型
2.1你好,仓颉
2.2注释
2.3数据类型
2.3.1整数类型
2.3.2浮点型
2.3.3字符型
2.3.4字符字节字面量
2.3.5布尔型
2.3.6Unit类型
2.3.7Nothing类型
2.3.8区间
2.3.9元组
2.3.10Any
2.3.11Option
2.3.12类型别名
2.4仓颉的各种“量”
2.4.1变量
2.4.2常量
2.4.3字面量
2.5操作符
2.5.1算术操作符
2.5.2自增与自减操作符
2.5.3比较与关系操作符
2.5.4位运算操作符
2.5.5赋值操作符
2.5.6复合赋值操作符
2.5.7类型检查操作符
2.5.8类型转换操作符
2.5.9括号、操作符优先级与结合方向
2.6数组/图解仓颉高效编程
2.6.1数组字面量
2.6.2构造一个数组
2.6.3数组的切片
2.6.4值类型数组
2.7字符串
2.7.1子串
2.7.2拼接
2.7.3插值字符串
2.7.4多行字符串
2.7.5多行原始字符串
2.7.6字符串的比较
2.7.7字符串的其他操作
2.7.8字符串的不可变性
2.7.9空串
2.7.10构造字符串
2.7.11字符串长度
2.8值类型与引用类型
2.9本章知识点总结和思维导图
第3章 流程控制与函数
3.1if表达式
3.2循环控制流程
3.2.1for-in 循环
3.2.2while循环
3.2.3do-while循环
3.2.4break
3.2.5continue
图解仓颉高效编程3.3函数
3.3.1声明一个函数
3.3.2函数参数
3.3.3函数的局部变量
3.3.4函数的返回值
3.3.5函数是一种数据类型
3.3.6嵌套函数
3.3.7函数的继承关系
3.3.8闭包
3.3.9函数重载
3.3.10不定长参数
3.4函数操作符
3.4.1管道操作符
3.4.2组合操作符
3.5顶级声明
3.6本章知识点总结和思维导图
第4章结构体、类与枚举
4.1声明结构体
4.2成员变量
4.2.1静态成员变量
4.2.2静态初始化器
4.2.3实例成员变量
4.3构造函数
4.3.1普通构造函数
4.3.2主构造函数
4.3.3创建一个实例
4.3.4构造函数重载
4.4成员函数
4.4.1静态成员函数
4.4.2实例成员函数
4.4.3函数重载
4.5成员属性
4.6成员可见性
4.6.1internal可见性
4.6.2public可见性
4.6.3private可见性
4.6.4protected可见性
4.7禁止递归依赖
4.8类
4.8.1声明类
4.8.2终结器
4.8.3类的递归依赖
4.8.4成员变量
4.8.5成员属性
4.8.6成员函数
4.8.7函数重载
4.8.8可见性
4.8.9结构体与类的选择
4.9枚举
4.9.1声明一个枚举
4.9.2枚举构造器的重载
4.9.3枚举的比较
4.9.4枚举的使用
4.9.5成员属性
4.9.6成员函数
4.9.7可见性
4.10模式匹配
4.10.1match分支表达式
4.10.2if-let分支表达式
4.10.3while-let循环
4.11本章知识点总结和思维导图
第5章 面向对象编程与继承
5.1面向对象编程思想概述
5.2面向对象编程的核心问题
5.3继承
5.3.1覆盖
5.3.2对成员变量的封装
5.3.3This类型
5.4抽象类
5.4.1抽象类的特征
5.4.2抽象成员
5.4.3封闭类
5.5可见性
5.6本章知识点总结和思维导图
第6章 接口、泛型、扩展、操作符重载
6.1接口
6.1.1声明一个接口
6.1.2实现接口
6.1.3封闭接口
6.1.4接口的继承
6.1.5接口的继承关系
6.1.6针对结构体的特殊规则
6.1.7装箱
6.2泛型
6.2.1声明一个泛型类型
6.2.2泛型的上下界
6.2.3泛型函数
6.2.4泛型初始化
6.2.5泛型的递归初始化
6.2.6泛型的限制
6.2.7泛型类型推断
6.3扩展
6.3.1扩展的意义
6.3.2扩展的声明
前言/序言
对于仓颉编程语言,我实在是太喜欢它了,并用它开发了一个工具库。传统编程语言中的动态语言给我的感受是有相当的弹性,几乎可以自由地发挥想象力。对于静态语言就不得不忍受更多的束缚,它们的语法规则冰冷、坚硬、不留余地。然而仓颉给了我不一样的感受,它是一种特别像动态语言的静态语言。
从参加内测以来,我发布了数百条issue(问题),并开发了一个工具库,现在我想把自己使用仓颉的经验做一个总结,也就是本书。在本书中,我将选用大量典型的示例代码演示仓颉的每一个语言特性和标准库特性。
关于本书
第1章对仓颉语言的特性和开发环境等进行概述,详细论述如何下载、安装仓颉,并通过编译运行典型的仓颉程序,指导读者使用仓颉SDK、仓颉VSCODE插件。
第2章和第3章开始讨论仓颉语言的基本特性。这两章涉及的基础知识有各种数据类型、变量、循环以及函数、类型转换、空安全等。对于熟练使用C/C++、Java、Go的程序员来说,学习这两章的内容会比较容易,因为仓颉语言的语法特性与这几种语言都有相似之处。
第4章将介绍仓颉复合类型——结构体、类和枚举。
第5章介绍仓颉的面向对象编程思想和面向对象的高级特性,包括继承、多态等,还对如何完成合理的OOP设计给出忠告。
第6章介绍如何使用仓颉的接口、扩展、操作符重载和泛型。
截至本章,仓颉的全部类型介绍完毕,结尾提供了仓颉类型关系图,并对仓颉类型进行总结。
第7章讨论异常处理。异常处理是仓颉的一种健壮机制,用于处理运行程序时可能出现的意外情况,提供了一种将正常业务代码与错误处理代码分开的有效手段。
第8章讨论仓颉多线程与并发编程。
第9章介绍一些常用标准库API,包括core、regex、json、math、time、convert、压缩、安全、进程等,并为某些API提供比官方文档更丰富的细节。
第10章讨论HTTP和数据库API。
第11章讨论常量、注解、反射、宏与跨语言互操作。很多语言对常量的定义只是用关键词声明的不可修改的变量,而仓颉拥有不可变量、可变量、字面量和常量。由于常量在注解上面用得比较多,其相关的知识也在本章介绍。仓颉元编程包含运行期的反射API和配合反射使用的注解,还有编译期可以修改代码的语法宏。
第12章讨论项目创建、项目目录结构、开发工具链和垃圾回收等内容。本章会以一个简单的项目为例,介绍如何用仓颉标准库开发一个Web服务项目,并以这个项目为基础介绍垃圾回收的相关内容,包括控制垃圾回收行为的初始化参数等。
附录列出了仓颉语言的关键词、操作符、可重载操作符、元编程TokenKind、语言特性总结等。
本书介绍的所有仓颉编程语言特性都基于开发版0.57.3。
约定
本书使用以下图标表示特殊内容。
提示: “提示”信息会用“提示”标示。
警告:对于可能出现的危险,用“警告”图标做出警示。
C++注释:书中有许多用来解释仓颉与C++编程差异的注释。
Java注释:书中有许多用来解释仓颉与Java编程差异的注释。
仓颉有一个标准程序设计库,即应用程序标准编程接口。本书会对它们进行概要描述。这些描述十分通俗易懂。书中程序样例以下述程序清单的形式给出。
程序清单1-1:001/helloworld.cj
示例代码
本书有完整的示例代码,均在开发版0.57.3下开发并完成测试。
适合人群
本书适合希望了解仓颉编程语言相关知识,或需要使用仓颉编程语言做开发工作且已具备编程基础知识的人群阅读。同时,各种编程知识的相关概念本书均做了介绍,即使是零基础读者也不会有阅读障碍。
附赠资源
书中附赠全部案例源代码,授课用PPT课件,书中出现的各种思维导图、流程图、时序图的原图,以及教学视频(扫码观看)等海量学习资源。同时,考虑集合和IO两个模块并没有难以理解或者容易用错的API,基本是重复标准库文档,因此为节约读者学习时间和购书成本,这两部分内容也以电子书形式提供。
致谢
感谢仓颉编程语言团队的专家吴森老师,他为笔者在使用仓颉语言开发时的很多技术细节和疑问提供了指导。
感谢仓颉编程语言团队的专家刘俊杰老师,他从技术角度提供了很多高价值的建议。
感谢仓颉编程语言团队的专家王学智老师,他为笔者写作本书时对仓颉语言的很多技术细节提供了指导。
前言
更多其他的仓颉团队的老师,在此也一并感谢,他们为本书的MySQL驱动、线程模型等语言特性细节提供了专业解答。
感谢机械工业出版社的丁伦老师,他从图书出版的角度提供了大量专业建议,包括书中内容选取、写作编排格式等。
感谢为本书作推荐的各位老师,感谢他们对笔者的信任。图解仓颉高效编程
唯愿本书能帮助读者尽快掌握仓颉编程语言并体会到使用仓颉编程的乐趣,谨以本书与各位读者共勉。另外,由于笔者水平所限,书中难免有不足之处,望各位