仓颉编程标识符、变量和程序结构【华为根技术】

举报
tea_year 发表于 2025/01/09 11:57:26 2025/01/09
278 0 0
【摘要】 仓颉语言作为华为推出的新一代编程语言,具有诸多强大的特性。本文将带你快速入门仓颉语言,了解其基本概念、语法和应用。仓颉语言是华为历经五年研发沉淀推出的编程语言,于 2024 年华为开发者大会上正式官宣。它主打原生智能化、天生全场景、高性能、强安全等特点,为开发者打造友好开发体验和卓越程序性能。仓颉语言的名字来自 “仓颉造字”,寄托了团队希望该语言被广大开发者喜爱并广为流传的期望。其文件后缀名...

仓颉语言作为华为推出的新一代编程语言,具有诸多强大的特性。本文将带你快速入门仓颉语言,了解其基本概念、语法和应用。

仓颉语言是华为历经五年研发沉淀推出的编程语言,于 2024 年华为开发者大会上正式官宣。它主打原生智能化、天生全场景、高性能、强安全等特点,为开发者打造友好开发体验和卓越程序性能。

仓颉语言的名字来自 “仓颉造字”,寄托了团队希望该语言被广大开发者喜爱并广为流传的期望。其文件后缀名为.cj,以下是第一个入门代码输出:“你好,仓颉。”

仓颉语言具有高效的数据处理能力、强大的 AI 支持、高度可读的语法和广泛的跨平台支持等特性。在大数据分析和处理任务中,其独特的数据流模型允许开发者以声明式的方式编写数据处理逻辑,简化了代码的复杂度。同时,仓颉语言集成了先进的机器学习和深度学习框架,支持包括 TensorFlow 和 PyTorch 在内的主流 AI 工具,开发者可以通过简洁的语法定义和训练模型,快速实现智能应用。

仓颉语言采用了类似于自然语言的语法结构,使得代码更加直观和易读。无论是经验丰富的开发者还是初学者,都可以轻松上手,提高开发效率。此外,仓颉语言支持多种操作系统和硬件平台,包括 Windows、Linux、macOS 以及华为的自研操作系统 HarmonyOS,开发者可以在不同平台之间无缝迁移代码,实现真正的跨平台开发。

标识符

仓颉编程语言中,开发者可以给一些程序元素命名,这些名字也被称为“标识符”,标识符分为普通标识符和原始标识符两类,它们分别遵从不同的命名规则。

普通标识符不能和仓颉关键字相同,可以取自以下两类字符序列:

XID_Start 字符开头,后接任意长度的 XID_Continue 字符

由一个_开头,后接至少一个 XID_Continue 字符

其中,XID_Start、XID_Continue 定义见Unicode 标准 。仓颉使用 Unicode 标准 15.0.0。

仓颉把所有标识符识别为 Normalization Form C (NFC)  后的形式。两个标识符如果在 NFC 后相等,则认为是相同的标识符。

例如,以下每行字符串都是合法的普通标识符:

abcd

_abcd

abcd_

a11b2c3

ab_bc_cd

a1_b2_c3

我爱仓颉

__こんにちは

以下每行字符串都是不合法的普通标识符:

acb&c // 使用了非法字符 “&”3abc // 数字不能出现在头部while // 不能使用仓颉关键字

原始标识符是在普通标识符或仓颉关键字的外面加上一对反引号,主要用于将仓颉关键字作为标识符的场景。

例如,以下每行字符串都是合法的原始标识符:

`abcd`

`_abcd`

`a21b12c13`

`if`

`while`

`à֮̅̕b`

以下每行字符串,由于反引号内的部分是不合法的普通标识符,所以它们整体也是不合法的原始标识符,例如

`abc&d`

`4acd`

程序结构

通常,我们都会在扩展名为.cj 的文本文件中编写仓颉程序,这些程序和文件也被称为源代码和源文件,在程序开发的最后阶段,这些源代码将被编译为特定格式的二进制文件。

在仓颉程序的顶层作用域中,可以定义一系列的变量、函数和自定义类型(如 structclassenum 和 interface 等),基础数据类型和 struct 等类型属于值类型,而 class 和 Array 等类型属于引用类型

// example.cj

let a = 2023

func b() {}

struct C {}

class D {}

enum E { F | G }

main() {

println(a)

}

在非顶层作用域中不能定义上述自定义类型,但可以定义变量和函数,称之为局部变量局部函数。特别地,对于定义在自定义类型中的变量和函数,称之为成员变量成员函数

变量

变量将一个名字和一个特定类型的值关联起来。

当初始值具有明确类型时,可以省略变量类型标注,编译器会自动推断出变量类型。

在定义仓颉变量时,可变性修饰符是必要的,在此基础上,还可以根据需要添加其他修饰符。

  • 变量名应是一个合法的仓颉标识符。
  • 变量类型指定了变量所持有数据的类型。当初始值具有明确类型时,可以省略变量类型标注,此时编译器可以自动推断出变量类型。
  • 初始值是一个仓颉表达式,用于初始化变量,如果标注了变量类型,需要保证初始值类型和变量类型一致。在定义全局变量或静态成员变量时,必须指定初始值。在定义局部变量或实例成员变量时,可以省略初始值,但需要标注变量类型,同时要在此变量被引用前完成初始化,否则编译会报错。

案例

变量估算圆周率

main(){
    pi=2.7
    println("pi=${pi}")
}

将代码修改为:

main(){
    let pi:Float64=3.14
    // pi=2.7
    println("pi=${pi}")
}

总结:

1. 理解标识符命名规则及其重要性

学习了标识符的命名规则,包括必须以字母或下划线开头,后续字符可以是字母、数字或下划线,且区分大小写。理解了合法和非法标识符的区别,以及如何通过原始标识符在特殊情况下使用关键字作为标识符。这提高了代码的可读性和可维护性,减少了命名冲突的可能性。

2. 掌握变量的定义与分类

熟悉了变量的定义方式,包括可变性修饰符(let  var)和可见性修饰符(private  public)。了解了值类型和引用类型的区别,值类型在赋值时会拷贝值本身,而引用类型则复制引用地址。通过实际示例,能够正确选择和使用不同类型的变量来优化程序性能。

3. 熟悉程序结构及其组成部分

掌握了仓颉语言的程序结构,变量、函数和自定义类型(如 structclassenum 和 interface 等)

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。