当前位置: 首页 > news >正文

华为仓颉编程语言语法简介与示例

华为仓颉编程语言语法简介与示例

仓颉编程语言是华为自主研发的新一代通用编程语言,由南京大学冯新宇教授团队主导设计,于 2024 年华为开发者大会(HDC)正式发布,并在 2025 年 7 月推出首个长期支持版本(LTS 1.0.0)。其核心定位是面向全场景智能应用开发,尤其聚焦鸿蒙生态,定位是“鸿蒙生态的下一代主力语言”。

官网 https://cangjie-lang.cn/

仓颉(Cangjie)是一门 静态类型、多范式、语法简洁、安全并发 的现代化编程语言,面向鸿蒙全场景设计。

仓颉编程语言目前(2025-07-19)尚处于测试阶段,官方为 Windows / macOS / Linux 三大桌面系统提供了统一的 SDK + 插件 安装方案。分为 DevEco Studio 和 VS Code 两条路线,任选其一即可。

新手若嫌上面这个有些麻烦,可用在线编辑器尝鲜体验:

https://cangjie-lang.cn/playground

注意,目前(2025-07-19)在线体验 |版本:0.53.18,并且,官方提示,在线体验版出于对在线体验功能的稳定性以及安全性的考虑,禁止了部分系统调用;在线体验环境因安全策略限制,无法直接使用原生stdin操作,输入输出场景受限。下面演示的代码就在此版本中测试通过。

仓颉编程语言基本结构

所有源码文件以 .cj 结尾,顶层可写变量、函数、类型;必须有 main() 作为入口。

// hello.cj
main() {println("Hello, Cangjie!")
}

参见下图:

这个在线体验版,比较直观好用,就不多说了,试试很快就能上手。

变量与基本类型

关键字

作用

示例

let

不可变

let pi = 3.1415

var

可变

var n: Int64 = 10

类型推断

可省略类型

val s = "text" // 编译器推断为 String

示例源码:

// basic_types.cj
main() {let a: Int8   = 127   // 8 位有符号var b: UInt32 = 42u32  // 无符号 32 位//a = 64  //不允许b = 100println("整型示例:")println("  a = ${a}, b = ${b}")
}

运行输出:

整型示例:
  a = 127, b = 100

下面给出更多数据类型的例子:

包括常用基本类型(包括整型、浮点型、布尔型、字符型、字符串、数组、元组、可选类型)以及 变量声明方式(let、var、类型推断、显式类型标注)。

main() {// 1. 整型let a: Int8   = 127          // 8 位有符号var b: UInt32 = 42u32       // 无符号 32 位let c         = -100_000     // 编译器推断 Int64// 2. 浮点型let pi: Float32 = 3.14f32   // 32 位浮点let e           = 2.71828    // 编译器推断 Float64// 3. 布尔型let flag: Bool = true// 4. 字符型(Unicode 标量)let ch: Rune = '😊'// 5. 字符串let s1 = "仓颉"let s2: String = "Cangjie"// 6. 数组let arr: Array<Int64> = [1, 2, 3, 4]// 7. 元组let tup: (String, Int64, Bool) = ("Alice", 18, false)// 8. 可选类型(Option)let maybe: Option<Int64> = Some(99)let none:  Option<Int64> = None// 9. 输出println("整型示例:")println("  a = ${a}, b = ${b}, c = ${c}")println("浮点示例:")println("  pi = ${pi}, e = ${e}")println("布尔示例:")println("  flag = ${flag}")println("字符示例:")println("  ch = ${ch}")println("字符串示例:")println("  s1 = ${s1}, s2 = ${s2}")println("数组示例:")for (item in arr) {print("${item} ")}println()println("元组示例:")let (name, age, vip) = tupprintln("  name=${name}, age=${age}, vip=${vip}")println("可选类型示例:")match (maybe) {case Some(v) => println("  maybe = Some(${v})")case None    => println("  maybe = None")}match (none) {case Some(v) => println("  none = Some(${v})")case None    => println("  none = None")}
}

运行输出:

整型示例:
  a = 127, b = 42, c = -100000
浮点示例:
  pi = 3.140000, e = 2.718280
布尔示例:
  flag = true
字符示例:
  ch = 😊
字符串示例:
  s1 = 仓颉, s2 = Cangjie
数组示例:
1 2 3 4 
元组示例:
  name=Alice, age=18, vip=false
可选类型示例:
  maybe = Some(99)
  none = None

流程控制

先给出简单示例

// flow_demo.cj 
main() {let n = 7if (n % 2 == 0) {println("${n} 是偶数")} else {println("${n} 是奇数")}
}

运行输出:

7 是奇数

下面给出一个包含多种控制语句的示例

包括仓颉语言中常用的 if/else、while、for-in、match、break/continue 。

main() {let n = 7// 1. if / elseif (n % 2 == 0) {println("${n} 是偶数")} else {println("${n} 是奇数")}// 2. whilevar i = 1while (i <= n) {print("${i} ")i += 1}println()// 3. for-in + continue + breakprintln("3 的倍数提前结束:")for (k in 1..=10) {if (k % 3 != 0) {continue}if (k > 6) {break}println("  -> ${k}")}// 4. match:把区间拆成多条 casematch (n) {case 1 => println("one")case 2 => println("small")case 3 => println("small")case 4 => println("small")case 5 => println("small")case 6 => println("medium")case 7 => println("medium")case 8 => println("medium")case 9 => println("medium")case _ => println("large")}
}

运行输出:

7 是奇数
1 2 3 4 5 6 7 
3 的倍数提前结束:
  -> 3
  -> 6
medium

函数

仓颉使用关键字 func 来表示函数定义的开始,func 之后依次是函数名、参数列表、可选的函数返回值类型、函数体。

仓颉编程语言函数及调用示例

// func_basic.cj
import std.io.*// 1. 无返回值
func greet(name: String) {println("Hello, ${name}!")
}// 2. 有返回值 + 默认参数
func add(a: Int64, b: Int64): Int64 {return a + b
}main() {greet("Alice")            // 调用 1let sum = add(5, 6)          // 调用 2(b 使用默认值 10)println("add(5, 6) 结果 = ${sum}")
}

运行输出:

Hello, Alice!
add(5, 6) 结果 = 11

就到这里吧!

 

http://www.dtcms.com/a/287225.html

相关文章:

  • 从0开始学习R语言--Day51--PH检验
  • 操作系统-分布式同步
  • 【REACT18.x】creat-react-app在添加eslint时报错Environment key “jest/globals“ is unknown
  • Spring AI 项目实战(十九):Spring Boot + AI + Vue3 + OSS + DashScope 构建多模态视觉理解平台(附完整源码)
  • 在 .NET Core 中创建 Web Socket API
  • Redis 如何保证高并发与高可用
  • Elasticsearch 重命名索引
  • OllyDbg技巧学习
  • Go-Redis × 向量检索实战用 HNSW 在 Redis 中索引与查询文本 Embedding(Hash JSON 双版本)
  • 子线程不能直接 new Handler(),而主线程可以
  • LLM大模型微调技术与最佳实践
  • C语言:20250719笔记
  • 目标检测中的标签分配算法总结
  • 【OD机试】停车场收费
  • OpenCV特征点提取算法orb、surf、sift对比
  • Netty网络聊天室及扩展序列化算法
  • 2025年睿抗机器人开发者大赛CAIP-编程技能赛(省赛)-RoboCom 世界机器人开发者大赛-本科组
  • 微软原版系统下载的几个好用网站
  • LVS——nat模式
  • 【ArcGIS技巧】最近分享的GIS插件总结与优化
  • 实战分享:Web3 前端开发Defi项目
  • 【设计模式C#】外观模式(用于解决客户端对系统的许多类进行频繁沟通)
  • 【Unity编辑器开发GUI.Window】
  • 企业运维实战:Jenkins 依赖 JDK21 与应用需 JDK1.8 共存方案(含流水线配置)
  • 软件工程:可行性分析的任务及报告
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 基于wordcloud库实现词云图
  • 使用nvm安装node、npm、pnpm以及编译项目教程
  • 告别项目混乱:基于 pnpm + Turborepo 的现代化 Monorepo 工程化最佳实践
  • 【音视频协议篇】RTSP系列
  • gitlab+jenkins