不二如是 发表于 2024-6-25 13:00:00

零基础入门学习「仓颉」编程语言|连载中

本帖最后由 不二如是 于 2024-8-8 10:42 编辑




仓颉编程语言作为一款面向全场景应用开发的现代编程语言,通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的 IDE 工具链支持,为开发者打造友好开发体验和卓越程序性能。

其具体特性表现为:

**** Hidden Message *****
除此之外,仓颉还支持面向应用开发的一系列工具链,包括:
语言服务(高亮、联想)、调试(跨语言调试、线程级可视化调试)、静态检查、性能分析、包管理、文档生成、Mock 工具、测试框架、覆盖率工具、Fuzz 工具以及智能辅助编程工具,进一步提升软件开发体验以及效率。

资源:仓颉白皮书



Hello World

在线学习:

https://www.bilibili.com/video/BV12w4m1e79z?p=1

创建扩展名为 .cj 的仓颉程序文件(例如 hello.cj)。

编写程序代码,包括主入口 main 和打印命令 println。

编译并运行仓颉程序,生成ELF格式的可执行文件。


02-命名规则|变量|数据类型|表达式

命名规则:标识符可以由英文字母开头,后接英文字母、数字或下划线。也可以由一个或多个下划线开头,但其后必须接一个英文字母,然后是字母、数字或下划线。支持原始标识符,使用反引号`将关键字包围,使之成为有效的标识符。

变量定义与使用:变量定义涉及变量名、类型和初始值。

变量类型分为可变变量、不可变变量和常量变量。

常量在编译时确定初始值,不可变变量在运行时确定初始值。

如果初始值表达式的类型明确,可省略变量类型标注,编译器将自动推导。

数据类型和操作:仓颉语言提供丰富的数据类型,支持开发者自定义类型。

基本数据类型包括整数、浮点数、布尔、字符和字符串类型。

数组和元组支持多种操作,包括字符串的拼接和数组的元素访问。

案例:使用统计方法通过随机投点估算圆周率。定义一个常量表示投点次数(例如100,000次)。定义变量统计落入圆内的点数,使用仓颉提供的随机数包进行操作。

变量和表达式:介绍了如何通过字面量和表达式来表示不同类型的值。提供了条件表达式、匹配表达式等高级功能,增强编程灵活性。


03-表达式|3大结构|包管理|main入口

if表达式:根据布尔表达式的值选择执行不同的代码分支。支持嵌套使用if表达式或添加else代码块。

while表达式:循环执行代码块直到布尔表达式为假。循环体可能不被执行,因此while表达式的类型被规定为Unit。

for-in表达式:遍历实现了迭代器接口的任何类型实例。循环体中可以通过不可变的循环变量引用迭代的值。支持在循环体不被执行的情况下将表达式的类型规定为Uint。

顺序结构、分支结构和循环结构:介绍了仓颉编程语言中实现这些基本结构的方式。

包管理:支持将程序分布在多个源文件中,便于管理和维护。每个包可包含一个或多个源文件,源文件中可以使用package关键字声明所属的包。包内部可以通过包导入声明来引用其他包,同一包内的文件共享程序元素。

主函数和程序入口:主函数main是程序执行的起点。

main函数可以无参数,或声明一个字符串数组类型的参数来接收程序启动参数。

main函数的返回值类型可以是整数或Uint。



04-函数特性|闭包|递归|Lambda|文件遍历

函数定义:函数是参数化的代码块,用于实现特定功能并可被多次调用。函数定义包括函数名、参数列表、返回值类型和函数体。支持命名参数和普通参数,命名参数可以有默认值。

函数调用和参数传递:支持使用默认参数值,简化调用过程。函数参数在函数体中作为不可变变量使用。

嵌套函数和闭包:函数体内可以定义嵌套函数。嵌套函数可以捕获并使用其外层作用域中的局部变量,形成闭包。嵌套函数返回时,可以维持其捕获的局部变量状态,实现功能封装和复用。

Lambda表达式:提供函数字面量的功能,使得函数定义更加灵活和简洁。Lambda表达式在定义时不需命名,可直接在参数列表中使用,常用于简化短小的函数实现。

递归和迭代功能:支持递归调用,用于处理如文件遍历等重复性任务。递归函数可以优化对资源的管理和访问,提高代码的可维护性和可读性。

函数类型和使用场景:函数被视为一等公民,即它们可以存储在变量中,作为参数传递,或作为其他函数的返回值。函数类型的声明和使用增加了仓颉编程语言的灵活性,使得编程模式更加多样化。

文件遍历函数:forEachFileDo函数展示了如何应用嵌套函数和闭包处理文件遍历,参数化处理函数增强了代码的通用性和复用性。


05-枚举|模式匹配|二叉树和斐波那契数列实例

枚举定义:仓颉语言允许定义带参数的枚举项和成员函数,极大地增强了枚举类型的功能性和灵活性。枚举类型支持构造参数递归引用自身,使得枚举可以用来表达更复杂的数据结构,如递归数据结构。

枚举类型的成员定义:可以在枚举类型中定义成员函数和成员属性,这些成员可以是实例成员或静态成员。成员函数中可以使用this关键字引用当前枚举实例,增加了编程的便利性和代码的可读性。

模式匹配:仓颉语言中的match表达式支持模式匹配,类似于其他函数式编程语言中的特性。通过模式匹配,可以方便地对枚举类型进行解构和条件判断,使得代码更简洁和高效。

匹配表达式的应用:匹配表达式(match)允许根据值的不同执行不同的代码路径,类似于传统的switch-case语句,但提供了更高的灵活性和表达力。支持多种模式,包括枚举模式、类型模式、绑定模式等,可以应用在各种场景中,如算法的实现和数据处理。

二叉树的实现:使用带参数的枚举类型构建二叉树结构,每个节点可以是一个叶子节点或者包含左右子节点的节点。traverse和generate函数展示了如何通过成员函数和静态函数操作枚举实例,实现树的遍历和生成。

斐波那契数列计算:使用match表达式实现斐波那契数列的计算,展示了如何在实际算法中应用模式匹配来处理不同的情况。


类与结构体区别|类的关键特性

类和结构体的基本区别

成员定义:类和结构体都可以定义成员变量和成员函数,但类还支持继承和多态,是面向对象编程的基础。

存储方式:通常类和结构体的存储方式不同。结构体通常存储在栈上,而类的实例可能存储在堆上。


类的构造和使用

构造函数:类需要定义构造函数来初始化成员变量或进行其他初始化操作。

继承:类可以继承另一个类,继承的类可以获得父类的所有公开和受保护成员。

多态:通过覆盖父类的方法,子类可以有不同的行为表现,实现运行时多态。


访问控制和静态成员

访问修饰符:类成员可以使用private、public等修饰符来控制访问权限。

静态成员:静态成员属于类本身,通过类名访问,不需要实例化。


继承和多态的应用

开放性:仓颉语言中,默认类是封闭的,需要使用open关键词来允许继承。

多态示例:通过改写继承来的方法,子类在执行时可以根据对象的实际类型来执行对应的方法,从而表现出不同的行为。


类型系统

值类型与引用类型:值类型通常存储在栈上,直接操作存储的数据;引用类型存储在堆上,变量存储的是数据的引用。

光玉2333 发表于 2024-6-25 14:15:20

123456

不二如是 发表于 2024-6-25 14:44:40

光玉2333 发表于 2024-6-25 14:15
123456

学起来

Snacks_bug 发表于 2024-6-25 15:56:45

不知道仓颉以后能不能成为比较厉害流行的编程语言,未来无限!

caeser 发表于 2024-6-25 16:15:34

国产的软件,应该要学习下

tomok 发表于 2024-6-25 16:43:27

感谢分享

szbin 发表于 2024-6-26 08:38:58

感谢分享,
搞一下开发环境搭建吧,还是用 DevEco Studio

chenmingfan 发表于 2024-6-26 11:29:44

感谢分享

天下乐 发表于 2024-6-26 11:38:37

感谢分享

不二如是 发表于 2024-6-26 12:28:31

Snacks_bug 发表于 2024-6-25 15:56
不知道仓颉以后能不能成为比较厉害流行的编程语言,未来无限!

一起期待

lzaiz24 发表于 2024-6-26 15:32:22

感谢分享,学起来
{:10_256:}

秋水SAMA 发表于 2024-6-26 16:49:29

学习学习

不二如是 发表于 2024-6-26 17:30:40

秋水SAMA 发表于 2024-6-26 16:49
学习学习

{:10_275:}{:10_275:}学起来

不二如是 发表于 2024-6-26 17:30:48

lzaiz24 发表于 2024-6-26 15:32
感谢分享,学起来

{:10_275:}{:10_275:}学起来

clollipops 发表于 2024-6-26 18:13:23

感谢分享

aix1a 发表于 2024-6-26 18:14:59

感谢分享

想个好名字@ 发表于 2024-6-26 18:15:01

感谢分享 希望国产慢慢变好

神荼Q 发表于 2024-6-26 18:15:16

这是又一种新的计算机语言嘛,Python 还没学好呢,又出来个这个,有心无力呀
还是先把Python 学会,变现之后再学其他的吧,这个了解了解就放下了

zhae89 发表于 2024-6-26 18:15:22

这么快的吗

亿壹粟 发表于 2024-6-26 18:16:45

感谢分享,好处和优势有很多感觉
页: [1] 2 3 4 5 6 7
查看完整版本: 零基础入门学习「仓颉」编程语言|连载中