Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一文带你入门仓颉编程语言(上)

一文带你入门仓颉编程语言(上)

作者头像
倔强的石头_
发布于 2025-01-02 00:47:53
发布于 2025-01-02 00:47:53
7.1K04
代码可运行
举报
文章被收录于专栏:C/C++指南C/C++指南
运行总次数:4
代码可运行
ce55c65a744a4fd6aec86a2f866d38dc.png
ce55c65a744a4fd6aec86a2f866d38dc.png

一、引言:仓颉编程的崛起

2024年6月21日下午,华为终端BG软件部总裁龚体先生在华为开发者大会主题演讲《鸿蒙原生应用,全新出发!》中向全球开发者介绍了华为自研仓颉编程语言,并发布了HarmonyOS NEXT仓颉语言开发者预览版。这是华为首次公开发布仓颉编程语言

e60fae52783d4a0c8bbcfffcef5278e5.png
e60fae52783d4a0c8bbcfffcef5278e5.png

2019年,仓颉编程语言项目在华为诞生,历经5年研发沉淀,大量研发投入,今日终于和全球开发者见面。仓颉编程语言通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的IDE工具链支持,为开发者打造友好开发体验和卓越程序性能。

仓颉编程语言是一款面向全场景智能的新一代编程语言,主打原生智能化、天生全场景、高性能、强安全。

二、编程环境搭建全攻略

f64393ef9cda41399564b498c4d2c845.png
f64393ef9cda41399564b498c4d2c845.png

工欲善其事,必先利其器。搭建仓颉编程环境,每个环节都至关重要。接下来,我将为大家详细剖析在不同操作系统下搭建环境的具体步骤。

官方下载链接 点击👉 下载中心-仓颉编程语言官网 (cangjie-lang.cn)

对于 Windows 用户

  • 首先要在 GitCode Cangjie 社区大显身手。
  • 在这里,找到并下载仓颉 VScode 插件以及对应的 SDK,这两个可是编程的得力助手。
  • 下载完成后,解压安装仓颉插件
  • 配置仓颉运行环境,配置路径务必精准到 “~\Cangjie-0.50.3-windows_x64\cangjie” 路径层级,只有这样才能让环境生效。
  • 万事俱备,按下 Ctrl+Shift+P 组合键,打开 VScode 功能搜索框,输入 “Create Cangjie Project”
  • 创建好项目后,选择 main.cj 文件,点击右上角 Run Code 按钮,
  • 你的第一个仓颉编程语言程序就能成功编译运行,仿佛看到一颗新星在代码宇宙中闪耀。

Linux 用户也有自己的专属攻略

  • 先安装 Visual Studio Code
  • 接着,同样要去 GitCode 社区下载仓颉语言插件以及 SDK
  • 不过要注意,得根据你的 Linux 系统架构,下载相应的.tar.gz 文件,
  • 下载好插件后解压,会得到一个.vsix 文件,在 VScode 的扩展页面,通过 “从 VSIX 安装” 选项将其安装妥当。
  • 对于 SDK,解压.tar.gz 文件后,把里面的 cangjie 文件夹放在你心仪的位置,然后在 VScode 的扩展设置里,将 cangjie 目录在系统中的位置填写在 “Cangjie SDK Path: CJNative Backend” 下面一栏
  • 值得一提的是,Cangjie Linux SDK 很贴心,不需要自己设置环境变量,它自带的 envsetup.sh 脚本会自动搞定一切。
  • 最后,按 Ctrl+Shift+P,输入 “Create Cangjie Project” 创建项目,选择合适的项目类型,输入名称,点开 “src” 找到 “main.cj” 源文件,点击右上方三角运行项目,看着终端输出 “hello world”,成就感涌上心头

Mac 用户攻略

  • 打开 VSCode,使用快捷键 Shift + Command + P 召唤出命令面板
  • 输入 cangjie,选择 “Create Cangjie Project” 选项,接着选择 “Create CJNative Cangjie project” 以及 “Create Executable Output Cangjie project”
  • 选好项目路径并输入名称,确认后就能自动生成 main.cj 文件
  • 然后用 VSCode 打开项目文件夹,在 Explorer 侧边栏找到 src/main.cj 文件,看看默认代码,熟悉一下它的 “模样”。
  • 运行项目前,要在 VSCode 中打开终端,输入 “source /Users/ 用户名 /cangjie/envsetup.sh”(记得把用户名替换为实际用户名)配置环境
  • 接着输入 “cjpm run” 运行项目,检查终端输出,要是看到 “hello world”,就说明成功
  • 要是想修改代码,打开 src/main.cj 文件,改动后保存,再次运行 “cjpm run”

三、基础语法精析

c24545ce37eb428aa8a968910a544a24.png
c24545ce37eb428aa8a968910a544a24.png
(一)变量与数据类型

在仓颉编程语言中,变量定义有着独特的规则。

变量由变量名、数据(值)和若干属性构成,定义时需要指定修饰符、变量名和变量类型(若初始值具有明确类型,可省略变量类型标注)。

修饰符犹如变量的 “标签”,常见的有可变性修饰符 let 与 var,其中 let 修饰的变量如同被封印的宝箱,一旦初始化赋值,就不能再更改,而 var 修饰的变量则像个万能口袋,允许多次赋值;可见性修饰符 private 与 public 等,掌控着变量在不同作用域的可见范围,就如同给变量划分了 “私密空间” 和 “公共广场”。

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let a: Int64 = 20

var b = 12

b = 23

println("${a}${b}")

这里,a被定义为不可变的Int64类型变量,初始值为 20,而b是可变变量,先赋值为 12,后又被重新赋值为 23。

数据类型方面,仓颉编程语言内置了丰富多样的类型,以满足不同场景需求。

整数类型分为有符号(signed)和无符号(unsigned),有符号整数类型涵盖 Int8、Int16、Int32、Int64 和 IntNative,能精准表示不同范围的有符号整数值;无符号整数类型包含 UInt8、UInt16、UInt32、UInt64 和 UIntNative,为处理无符号整数提供了多样选择。整数类型字面量支持二进制(0b 或 0B 前缀)、八进制(0o 或 0O 前缀)、十进制(无前缀)、十六进制(0x 或 0X 前缀)4 种进制表示,还可用下划线_充当分隔符,方便识别数值位数,如0b0001_1000。使用时,若字面量值超出对应类型范围,编译器会立刻发出 “警报” 报错。同时,通过添加后缀能明确整数字面量类型,如100i8表示Int8类型的 100。

浮点类型包括 Float16、Float32 和 Float64,分别对应 IEEE 754 中的半精度、单精度和双精度格式,精度依次提升,能处理不同精度要求的带小数数字。布尔类型用 Bool 表示,是逻辑判断的基石,只有真(true)和假(false)两种取值。字符类型(如r'甲')用于表示单个字符,而字符串类型(如"你好,仓颉")则能容纳一串字符,在文本处理中发挥关键作用。

此外,还有数组、元组、区间等复合数据类型。

数组就像一个个整齐排列的收纳盒,能存放同类型元素,通过索引访问其中元素;元组则如同定制的礼品套装,可将不同类型元素有序组合,按位置提取元素;区间类型用于表示一个有固定步长的数值序列,格式为start..end[: step](左闭右开区间)或start...end[: step](左闭右闭区间),例如0..4表示序列0, 1, 2, 3,常用于循环遍历场景,能让代码简洁高效地处理特定范围数据。

(二)表达式与流程控制

if 表达式:这是程序决策的 “指挥官”,用于根据条件的值来决定是否执行相关代码逻辑,有单分支、双分支和嵌套三种形式。单分支 if 表达式形如if (条件) {代码块},条件必须是布尔类型表达式,若条件为 true,就执行括号内代码块,否则直接跳过。

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let score: UInt16 = 85

if (score >= 60) {

println("及格")

}

println("程序继续执行")

这里当score >= 60条件满足时,输出 “及格”,无论如何都会输出 “程序继续执行”。

双分支 if 表达式语法为if (条件) {代码块1} else {代码块2},条件为 true 执行代码块 1,为 false 则执行代码块 2。像判断成绩是否及格并输出相应结果就很适用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let score: UInt16 = 45

if (score >= 60) {

println("及格")

} else {

println("不及格")

}

println("程序结束")

嵌套 if 表达式在需要精细判断多个条件时大显身手,格式为if (条件1) {代码块1} else if (条件2) {代码块2}... else {代码块n},程序会依次测试条件,找到第一个为 true 的条件并执行对应代码块,若都为 false 则执行 else 分支代码块。比如根据不同成绩范围给出等级:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let score: UInt16 = 75

if (score < 60) {

println("不及格")

} else if (score < 80) {

println("良好")

} else {

println("优秀")

}

for 表达式主要用于遍历序列,语法为for (循环变量 in 序列) {循环体},循环变量在每次循环中接收序列的下一个元素并执行循环体,直到遍历完序列。若序列为空,循环体则不会启动。例如遍历数组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let numbers = [1, 2, 3, 4, 5]

for (num in numbers) {

println(num)

}

这段代码会依次输出数组中的每个数字。而且在 for 循环中,还能对循环变量进行解构,如for ((index, value) in enumerate(numbers)),可同时获取索引和值,让代码更灵活。

while 表达式:while 表达式是循环结构中的 “耐力选手”

基本形式为while (条件) {循环体},条件为布尔类型,每次循环前先判断条件,若为 true 则执行循环体,执行完自动返回重新判断条件,直到条件为 false 才跳出循环。

若条件一开始就为 false,循环体一次都不会执行。

例如用 while 计算 1 到 10 的阶乘:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
main() {

var number = 0

var factorial = 1

while (number < 10) {

number++

factorial *= number

println("$(number)! = $(factorial)")

}

}

在循环中,还可配合break表达式提前终止循环,或用continue表达式跳过当前循环剩余部分直接进入下一次迭代,让循环控制更加得心应手,以应对复杂的逻辑需求。

四、函数:代码复用的利器

(一)普通函数

在仓颉编程语言里,函数是组织代码、实现复用的得力工具。

定义函数时,使用关键字func开启函数定义之旅,其后依次排列着函数名、参数列表、可选的返回值类型以及函数体。

就像func add(a: Int64, b: Int64): Int64 { return a + b }这般,定义了一个名为add的函数,它有两个Int64类型的参数a和b,返回值类型为Int64,函数体内执行两数相加并返回结果。

参数列表可是函数的 “入口”,参数分为非命名参数(如p: T形式,p为参数名,T为类型)和命名参数(p!: T形式,还可为其设默认值,如p!: T = e,e为表达式)。

要注意:

非命名参数得在命名参数前定义。

函数体呢,包含着函数被调用时执行的 “任务”,由变量定义、表达式等组成,甚至还能嵌套新函数。

函数的返回值类型可选,若显式定义,函数体和return表达式的类型得是返回值类型的子类型;

若省略,编译器会依据函数体和return表达式推导,不过推导也有失败的时候,编译器就会报错啦。

调用函数时,形式为函数名(参数列表),非命名参数直接传值,命名参数用参数名: 值形式传值,若命名参数有默认值,不传实参就用默认值,传了新值就用新值替代默认值。

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func add(a: Int64, b!: Int64 = 2) {

return a + b

}

main() {

let x = 1

let r = add(x)

println("The sum of x and b is ${r}")

}

这里add函数的b参数有默认值 2,调用add(x)时,b使用默认值,结果为x + 2。若改成let r = add(x, b: 20),b就取值 20,结果为x + 20。

(二)Lambda 表达式

Lambda 表达式是匿名函数,能在需要函数的地方 “闪现”,无需提前定义函数名。

语法为{ p1: T1,..., pn: Tn => expressions | declarations },=>前是参数列表(可为空),后是表达式或声明序列。比如let f1 = { a: Int64, b: Int64 => a + b },定义了一个求两数和的 Lambda 表达式。

它的参数类型标注可省略,编译器会根据上下文推断,像赋值给变量或作为函数实参时,会依据变量类型或函数形参类型来推断。

而且它不支持声明返回类型,返回类型由上下文 “定夺”,赋值给变量就按变量类型,作为函数参数就依形参类型,作为返回值就跟所在函数返回类型走。

调用 Lambda 表达式很灵活,既可以立即调用,如let r1 = { a: Int64, b: Int64 => a + b }(1, 2),直接传入参数求值;

也能赋值给变量,之后用变量名调用,像func f() { var g = { x: Int64 => println("x = ${x}") }; g(2) },先把 Lambda 表达式赋给g,再用g(2)触发执行,输出x = 2。

在一些临时需要简单函数逻辑的场景,如数据处理、回调函数场景中,能让代码简洁又高效,无需繁琐的函数定义步骤,随时定义、随时使用,大大提升编程的灵活性与效率

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
探秘仓颉编程语言:使用体验与功能剖析
想要踏上仓颉编程之旅,第一步便是搭建开发环境。目前,我们可以选择 HarmonyOS DevEco Studio 或者 VsCode 进行开发,不过都需要安装仓颉插件。
倔强的石头_
2025/01/02
4080
探秘仓颉编程语言:使用体验与功能剖析
一文带你入门仓颉编程语言(下)
2024年6月21日下午,华为终端BG软件部总裁龚体先生在华为开发者大会主题演讲《鸿蒙原生应用,全新出发!》中向全球开发者介绍了华为自研仓颉编程语言,并发布了HarmonyOS NEXT仓颉语言开发者预览版。这是华为首次公开发布仓颉编程语言。
倔强的石头_
2025/01/02
2970
一文带你入门仓颉编程语言(下)
仓颉语言实战——3.表达式
在编程语言中,表达式是最小的可执行单元,决定了程序的计算能力和逻辑控制。仓颉语言(Cangjie Language)以简洁而灵活的语法为特色,其表达式支持丰富的类型和操作,是构建复杂逻辑的基础。
hope kc
2025/01/17
1540
仓颉语言实战——3.表达式
仓颉编程语言:编程世界的 “文化瑰宝”
仓颉,本是传说中创造汉字的始祖,以他之名命名的编程语言,自然有着浓厚的文化底蕴。它旨在融合传统文化元素与现代编程思维,为开发者们开辟出一条别具一格的编程道路。这不仅仅是一种代码的编写方式,更像是在数字时代传承和弘扬文化的新载体,让古老的智慧在代码的世界里焕发出新的生机。
学无止尽5
2024/12/31
2690
仓颉编程语言:编程世界的 “文化瑰宝”
华为仓颉编程语言正式发布,附入门教程
仓颉(约公元前2650年)是中国古代传说中的人物,据说是黄帝的史官,他被认为是汉字的创造者。
数据STUDIO
2024/06/27
2.7K0
华为仓颉编程语言正式发布,附入门教程
探索未来编程:仓颉语言的优雅设计与无限可能
现代编程语言层出不穷,每一种语言都试图在特定领域中提供更高效、更强大的能力。然而,在各种语言的繁荣背后,我们仍然面临许多共性的问题:如何简化开发过程?如何提高运行效率?如何增强代码的可维护性与安全性?仓颉语言应运而生,它是一种面向全场景应用开发的通用编程语言,通过其独特的设计理念和特性,为程序员提供了优雅与高效兼具的解决方案。
hope kc
2025/01/17
1640
探索未来编程:仓颉语言的优雅设计与无限可能
华为仓颉编程语言正式发布,Java、Python 瑟瑟发抖。。
华为在上个月 6 月 21 日的华为开发者大会上,华为终端 BG 软件部总裁龚体正式官宣了华为自研仓颉编程语言,并发布了 HarmonyOS NEXT 仓颉语言开发者预览版。
架构狂人
2024/07/16
3120
华为仓颉编程语言正式发布,Java、Python 瑟瑟发抖。。
2.Go编程快速入门学习
描述: 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等。 Go语言中标识符由字母数字和(下划线)组成,并且只能以字母和开头。 举几个例子:abc, _, _123, a123。
全栈工程师修炼指南
2022/09/29
1K0
华为自研编程语言“仓颉”来了!鸿蒙应用开发新语言,性能优于 Java、Go、Swift
在今天刚刚召开的华为开发者大会(HDC 2024)上,华为内部研发已久的国产自主编程语言仓颉终于正式对外官宣!
深度学习与Python
2024/06/27
1.3K0
华为自研编程语言“仓颉”来了!鸿蒙应用开发新语言,性能优于 Java、Go、Swift
华为竟然发布了自己的编程语言 “仓颉”,遥遥领先?!
大家好,我是程序员鱼皮。在 2024 年 6 月 21 日的华为开发者大会上,华为不仅官宣了下一代鸿蒙操作系统 HarmonyOS NEXT,而且还正式推出了自研的编程语言 仓颉 ,可谓是赚足了面子,遥遥领先!
程序员鱼皮
2024/06/25
5.1K1
华为竟然发布了自己的编程语言 “仓颉”,遥遥领先?!
华为编程语言正式发布了
华为在 2024 年 6 月 21 日的华为开发者大会上,华为终端 BG 软件部总裁龚体正式官宣了华为自研仓颉编程语言,并发布了 HarmonyOS NEXT 仓颉语言开发者预览版。
Python小二
2024/07/04
1970
华为编程语言正式发布了
仓颉语言实战——1. 类型
仓颉编程语言是一种静态类型(statically typed)语言:大部分保证程序安全的类型检查发生在编译期。同时,仓颉编程语言是一种强类型(strongly typed)语言:每个表达式都有类型,并且表达式的类型决定了它的取值空间和它支持的操作。静态类型和强类型机制可以帮助程序员在编译阶段发现大量由类型引发的程序错误。
hope kc
2025/01/17
930
仓颉语言实战——1. 类型
Go 语言入门系列:Go 语言中的常量别名与控制结构
前面一篇文章主要介绍了 Go 语言中的指针基本概念与相关用法。Go 语言限制了指针类型的偏移和运算能力,使得指针类型具备了指针高效访问的特性,但又不会发生指针偏移,避免了非法修改敏感数据的问题。本文将会介绍常量与别名的基本使用,以及补充介绍 Go 编译工具相关的内容,作为系列文章,在前面的文章中漏掉了介绍,这里我们补充介绍一下。
aoho求索
2021/07/16
7050
[GO语言基础] 五.顺序控制语句和条件控制语句(if、else、switch)
作为网络安全初学者,会遇到采用Go语言开发的恶意样本。因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识;另一方面是分享与读者,希望大家一起进步。前文介绍了Golang的运算,包括算术运算、逻辑运算、赋值运算、位运算及编程练习。这篇文章将详细讲解顺序控制语句和条件控制语句。这系列文章入门部分将参考“尚硅谷”韩顺平老师的视频和书籍《GO高级编程》,详见参考文献,并结合作者多年的编程经验进行学习和丰富,且看且珍惜!后续会结合网络安全进行GO语言实战深入,加油~
Eastmount
2021/12/03
1.7K0
[GO语言基础] 五.顺序控制语句和条件控制语句(if、else、switch)
JavaScript入门之流程控制语句
文章转载至:https://fangcaicoding.cn/article/52
方才编程_公众号同名
2024/10/23
2080
JavaScript入门之流程控制语句
程序员C语言快速上手——基础篇(三)
上一节已经讲过,由于C语言中,整型的实际长度和范围不固定的问题,会导致C语言存跨平台移植的兼容问题,因此,C99标准中引入了stdint.h头文件,有效的解决了该问题。
arcticfox
2019/06/26
1.2K0
程序员C语言快速上手——基础篇(三)
仓颉编程语言
随着万物互联以及智能时代的到来,软件的形态将发生巨大的变化。一方面,移动应用和移动互联网领域仍然强力驱动人机交互、设备协同、智能化、安全性等方向的创新,另一方面人工智能也同样驱动软件朝智能化、端边云协同等方向演进。新技术、新场景下应用软件的开发对编程语言提出了新的诉求和挑战。
张哥编程
2025/01/02
4710
【仓颉】创建静态库及使用
“仓颉编程语言是一款面向全场景智能的新一代编程语言,主打原生智能化、天生全场景、高性能、强安全。融入鸿蒙生态,为开发者提供良好的编程体验。” ——摘自仓颉首页[1] 本文将逐步实现仓颉静态库的创建和使用,使用的当前版本为0.51.4。
徐建国
2024/07/16
2960
【仓颉】创建静态库及使用
02-C语言与Go语言有什么区别?(Go语言入门到精通)
如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是江哥持续更新的动力。
极客江南
2021/09/12
1.3K0
02-C语言与Go语言有什么区别?(Go语言入门到精通)
仓颉语言实战——2.名字、作用域、变量、修饰符
在现代编程语言中,名字、作用域、变量以及修饰符是决定代码质量和可维护性的基础。仓颉语言(Cangjie Language)作为一门现代化语言,也有一套强大而灵活的机制来处理这些概念。本篇文章将通过详细的实例代码,深入探讨仓颉语言在名字管理、作用域控制、变量使用以及修饰符方面的特性。
hope kc
2025/01/17
1430
仓颉语言实战——2.名字、作用域、变量、修饰符
推荐阅读
相关推荐
探秘仓颉编程语言:使用体验与功能剖析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验