華為倉頡編程語言語法簡介與示例
倉頡編程語言是華為自主研發的新一代通用編程語言,由南京大學馮新宇教授團隊主導設計,于 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
就到這里吧!
?