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

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

仓颉编程语言是华为自主研发的新一代通用编程语言,由南京大学冯新宇教授团队主导设计,于 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() 作为入口。

cpp 复制代码
// hello.cj
main() {
    println("Hello, Cangjie!")
}

参见下图:

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

变量与基本类型

关键字 作用 示例
let 不可变 let pi = 3.1415
var 可变 var n: Int64 = 10
类型推断 可省略类型 val s = "text" // 编译器推断为 String

示例源码:

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

运行输出:

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

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

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

cpp 复制代码
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) = tup
    println("  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

流程控制

先给出简单示例

cpp 复制代码
// flow_demo.cj 
main() {
    let n = 7

    if (n % 2 == 0) {
        println("${n} 是偶数")
    } else {
        println("${n} 是奇数")
    }
}

运行输出:

7 是奇数

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

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

cpp 复制代码
main() {
    let n = 7

    // 1. if / else
    if (n % 2 == 0) {
        println("${n} 是偶数")
    } else {
        println("${n} 是奇数")
    }

    // 2. while
    var i = 1
    while (i <= n) {
        print("${i} ")
        i += 1
    }
    println()

    // 3. for-in + continue + break
    println("3 的倍数提前结束:")
    for (k in 1..=10) {
        if (k % 3 != 0) {
            continue
        }
        if (k > 6) {
            break
        }
        println("  -> ${k}")
    }

    // 4. match:把区间拆成多条 case
    match (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 之后依次是函数名、参数列表、可选的函数返回值类型、函数体。

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

cpp 复制代码
// 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")            // 调用 1
    let sum = add(5, 6)          // 调用 2(b 使用默认值 10)
    println("add(5, 6) 结果 = ${sum}")
}

运行输出:

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

就到这里吧!

相关推荐
浅念-7 分钟前
C语言编译与链接全流程:从源码到可执行程序的幕后之旅
c语言·开发语言·数据结构·经验分享·笔记·学习·算法
小宋102118 分钟前
Java 项目结构 vs Python 项目结构:如何快速搭一个可跑项目
java·开发语言·python
一晌小贪欢1 小时前
Python 爬虫进阶:如何利用反射机制破解常见反爬策略
开发语言·爬虫·python·python爬虫·数据爬虫·爬虫python
阿猿收手吧!1 小时前
【C++】异步编程:std::async终极指南
开发语言·c++
小程故事多_801 小时前
Agent Infra核心技术解析:Sandbox sandbox技术原理、选型逻辑与主流方案全景
java·开发语言·人工智能·aigc
沐知全栈开发1 小时前
SQL 日期处理指南
开发语言
黎雁·泠崖1 小时前
【魔法森林冒险】3/14 Allen类(一):主角核心属性与初始化
java·开发语言
黎雁·泠崖1 小时前
【魔法森林冒险】1/14 项目总览:用Java打造你的第一个回合制冒险游戏
java·开发语言
独好紫罗兰2 小时前
对python的再认识-基于数据结构进行-a006-元组-拓展
开发语言·数据结构·python
C++ 老炮儿的技术栈2 小时前
Qt 编写 TcpClient 程序 详细步骤
c语言·开发语言·数据库·c++·qt·算法