前言 二十多年前的1997年,作为一名计算机专业的大一新生,笔者第1次接触了编程语言。一开始学习的是汇编语言,后来逐步学习了其他语言,例如C、C++、Java等,还自学了Pascal等语言。毕业以后,工作中使用的语言主要追随行业趋势,先用了一段时间Power Script,然后是Delphi,从2003年开始,重点用C#,一直到2017年,最后全面转向Java。中间也接触了其他几种语言,例如Python、Scala等,但没有在工作中实际应用,也就没有深入研究。 但是,很遗憾,这些语言没有一种是我国自主研发的,在当前的大环境下,这是我们信息技术产业的又一个软肋,存在着被“卡脖子”的巨大风险,为了我国科技的发展,为了尽可能地减少不可预测事件的影响,我们有必要研发自己的编程语言。 众所周知,研发一种全新的语言不是一件容易的事情,语言本身的难度和创新性是一方面,配套的生态则是更巨大的挑战,所以说,大部分流行语言是业内有影响力的企业主持研发的,而社区主导的语言需要经过漫长的时间才有可能流行起来,可是,我们没有那么多时间。 幸运的是,华为编译器与编程语言实验室一直在做这件事情,并且有了重大的研发进展,但是,他们一直隐藏在幕后,直到2021年9月,华为邓泰华先生表示,将在2022年推出自研编程语言时,仓颉语言才进入了公众的视线。就个人来讲,最近几年,主要研究方向是鲲鹏领域,并在清华大学出版社出版了《鲲鹏架构入门与实战》,但是,对自主可控语言发展的关注一直没放松过,当仓颉语言项目的发起人兼项目经理王学智先生邀请我参加仓颉语言的内测时,我毫不犹豫地答应了,能参与仓颉语言的研发是我的荣幸,也是支持自主可控语言发展的方式之一。 在参加仓颉语言内测的同时,也根据测试的情况提交了一些仓颉语言的问题(Issue),在仓颉编程语言社区发布的2021年度报告中,被列为提交Issue最多的三个人之一。不过,坦率地说,仓颉语言毕竟是一种全新的语言,官方的资料只能逐步提供,所以,要推进仓颉生态的发展,就需要更多的参与者主动编写仓颉语言学习资料,为以后其他人的学习提供方便。在和清华大学出版社赵佳霓编辑沟通后,就决定编写一本面向仓颉语言初学者的入门书,也就是这本《仓颉语言实战(微课视频版)》。本书的定位是“零基础入门仓颉语言”,分为入门篇、进阶篇和高级篇,特别针对初学者的特点,提供了大量的代码示例,并且给出了详细的注解,可以说达到了“手把手教初学者入门”的预期目的。 在当前的世界里,虽然科技领域的争端还在继续,但是,我们欣慰地看到,在ICT领域,国产自主可控技术得到了空前大发展,从硬件到软件,从底层的操作系统、数据库到各种应用中间件都有了很多颇具代表性的产品,这次华为推出的仓颉语言更是“向下扎到根,向上捅破天”的具体体现,我相信,以我们国家程序员的聪明才智,加上我们软件企业的规模和体量,仓颉语言一定能快速建立生态,成长为和Java、Python等著名语言齐名的新一代开发语言。 本书特色 本书践行“零基础入门仓颉语言”的核心理念,在章节设计和内容编排上具有以下几个特点。 (1) 内容通俗易懂,使用平白的文字介绍仓颉开发的相关知识,在介绍语言特性时,不仅介绍特性本身,还会介绍为什么需要这种特性,能解决什么问题,帮助读者加深理解。 (2) 知识点循序渐进,按照章节顺序学习即可,新知识点学习只依赖学过的内容,很少需要参考后续章节。 (3) 丰富的代码示例,本书包含200多个完整的示例代码,每段代码都针对书中知识点精心设计,按照《CangJie语言通用编程规范》编写,包括详细的代码注释和说明,并且每段代码均可以独立运行。 本书内容 第1章: 仓颉语言简介,包括仓颉语言的发展经历及语言的特点。 第2章: 仓颉开发准备,包括如何安装仓颉开发需要的工具链,以及编辑器、开发插件等。 第3章: 第一个仓颉程序,从经典的Hello World开始,介绍了代码的编写、编译及程序的运行。 第4章: 基本数据类型与操作符,包括标识符、关键字、变量等基础概念,以及仓颉语言基本数据类型和操作符,通过具体示例的方式,演示数据类型和操作符的使用方法。 第5章: 函数,包括函数的定义、参数、返回值、函数体等内容,最后介绍了嵌套函数。 第6章: 流程控制,包括条件表达式、循环表达式、match表达式等。 第7章: 入门综合实例,通过一个综合的入门实例,融会贯通前几章学习的知识,包括变量、函数、流程控制等内容,从总体上掌握基础的仓颉程序开发。 第8章: struct类型,包括struct类型的必要性及如何定义和使用。 第9章: class类型,包括对象、继承等关键概念,展示在仓颉语言里使用面向对象编程的方法。 第10章: enum类型,重点介绍enum的构造器。该章是学习后续知识的基础。 第11章: 接口,包括接口的必要性及接口的定义、实现、继承,最后介绍了仓颉语言内置的典型接口。 第12章: 泛型,包括泛型的必要性及泛型接口、泛型函数和泛型约束的用法,最后介绍了泛型类型,包括泛型class、泛型struct、泛型enum。 第13章: 包管理,通过具体示例演示包的导入和导出。掌握了包的使用方法,就可以在开发中使用仓颉语言内置的大量库函数,也可以使用第三方提供的包。 第14章: 扩展,演示如何在不破坏封装的情况下,给已有的类型添加成员或者实现接口。 第15章: 基础集合类型,包括Array和ArrayList,通过对比的方式展示在访问方式上的共性及在修改操作上的区别,从而可以更好地了解各自的适用场景。 第16章: 函数的进阶用法,包括函数的重载,操作符的重载,以及函数作为“第一类对象”带来的特性。 第17章: 类型关系,包括类型之间的关系及类型转换的方式,了解了类型关系就能更好地了解多态,了解面向对象的编程方式。 第18章: 异常,包括异常的定义和异常处理的方法,重点介绍了Option类型在异常处理中的使用。 第19章: 基础类库,包括格式化库、随机数库、数学库、时间库等,了解基础类库的常用用法,可以更好地进行程序编写。 第20章: 字符及字符串处理,包括字符及字符串的十余种常用操作方法,通过一个游戏示例,演示字符串在开发中的实际应用。 第21章: 高级集合类型,包括表示不重复集合的HashSet和表示键值对的HashMap,这两种类型在企业级开发中经常用到。 第22章: 模式匹配,模式匹配的概念及match表达式支持的6种模式。 第23章: 函数的高级用法,包括广泛使用的Lambda表达式及闭包和函数调用语法糖。 第24章: 并发,包括仓颉语言特有的线程模型“仓颉线程”,同时介绍了解决并发编程数据同步问题的常用方式。 第25章: 文件处理,包括文件、目录的基础操作和文件读写的实现。 第26章: 仓颉编译器,包括常用编译选项及如何进行条件编译。 第27章: 仓颉调试器,包括常用调试命令,通过实际示例的方式演示这些调试命令的具体用法。 致谢 感谢华为编译器与编程语言实验室的壮举,你们是新时代的开拓者! 感谢清华大学出版社,特别是以赵佳霓编辑为代表的工作人员,专业、严谨、细致的你们始终是我学习的榜样,也是本书顺利出版的保证。 感谢参与仓颉语言内测的所有朋友,和你们的交流使我对仓颉语言有了更深入的理解。 最后感谢我的妻子小朱同学和我们的孩子婉婉小朋友,在备战中考的同时还尽力给我提供了安心的写作环境,你们永远是我的骄傲。 作者 2024年5月于青岛 本书源代码