華為倉頡編程語言語法簡介與示例

華為倉頡編程語言語法簡介與示例

倉頡編程語言是華為自主研發的新一代通用編程語言,由南京大學馮新宇教授團隊主導設計,于 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.pswp.cn/web/89639.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89639.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89639.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

觸發器的創建

- 建立product表&#xff0c;操作方式operate表要求1.定義觸發器實現在產品表(product)中每多一個產品,就在操作表(operate)中記錄操作方式和時間以及編號記錄。注&#xff1a;操作說明&#xff1a;標記執行delete 、insert、update2.定義觸發器實現在產品表(product)中每更新一…

論文略讀: RASA: RANK-SHARING LOW-RANK ADAPTATION

ICLR 2025盡管 LoRA 有諸多優勢&#xff0c;但近期研究表明&#xff0c;它在大規模訓練數據集和復雜任務&#xff08;如數學推理和代碼生成&#xff09;中&#xff0c;仍然落后于全參數微調&#xff08;FFT&#xff09;一個合理的解釋是&#xff1a;低秩約束限制了 LoRA 的表達…

VSCode - VSCode 查找中文字符

VSCode 查找中文字符 1、查找中文字符使用快捷鍵 Ctrl F 打開查找框點擊正則表達式按鈕 .*在搜索框中輸入 [\u4e00-\u9fa5]&#xff0c;這個范圍涵蓋了基本的中文字符2、查找中文字符串使用快捷鍵 Ctrl F 打開查找框點擊正則表達式按鈕 .*在搜索框中輸入 [\u4e00-\u9fa5]&a…

SQL基礎操作指南:增刪改查入門

前言 在日常數據庫操作中&#xff0c;掌握增刪查改是每個開發者必備的技能。下面我將通過實例解析SQL的核心操作要點&#xff0c;幫你避開常見陷阱。一、新增數據&#xff08;INSERT&#xff09; 單行插入&#xff1a;明確指定字段和值 INSERT INTO 表名(字段1, 字段2) VALUES …

Linux系統安裝Docker及部署Node.js 20.15.0(含pnpm、pm2)完整指南

前言&#xff1a;在應用項目部署中&#xff0c;“環境不一致”往往是開發與運維的痛點——本地能跑的代碼到了服務器就報錯&#xff0c;依賴版本、系統配置差異都可能成為隱患。而Docker的容器化技術恰好能解決這一問題&#xff0c;通過“一次構建&#xff0c;到處運行”的特性…

python的多線程無法并行只能并發,why?

標題python的多線程無法并行只能并發&#xff0c;why&#xff1f;python的多線程無法并行只能并發&#xff0c;why&#xff1f; 在 Python 中&#xff0c;特別是使用 CPython 解釋器時&#xff0c;由于存在 全局解釋器鎖&#xff08;GIL&#xff09;&#xff0c;即使在多核處理…

Kotlin比較接口

在 Kotlin 中&#xff0c;Comparable 和 Comparator 是兩個允許開發者對相同或不同類的對象進行比較的接口。這兩個接口通常用于基于一個或多個屬性對對象集合進行排序與排序操作。本文將概述 Kotlin 的 Comparable 和 Comparator 接口&#xff0c;解釋它們的用法&#xff0c;并…

day41 簡單CNN

DAY 41 首先回顧下昨天的代碼。 # import torch # import torch.nn as nn # import torch.optim as optim # from torchvision import datasets, transforms # from torch.utils.data import DataLoader # import matplotlib.pyplot as plt # import numpy as np# # 設置中文字…

[實戰]巴特沃斯濾波器全流程解析:從數學原理到硬件實現

巴特沃斯濾波器全流程解析&#xff1a;從數學原理到硬件實現 文章目錄巴特沃斯濾波器全流程解析&#xff1a;從數學原理到硬件實現1. 數學原理2. 工程實現梯形網絡結構3. Python理論仿真4. 硬件仿真與PCB考慮5. 完整設計工具6. 輸出結果示例7. 設計注意事項巴特沃斯濾波器是特別…

《機器學習數學基礎》補充資料:標準差與標準化

1 標準差 我們經常使用平均數來大致了解一組數據&#xff0c;例如平均成績、平均身高、平均壽命等等。但是如果只看平均數&#xff0c;不一定能充分了解整體情況。比如說你和某首富住同一個社區&#xff0c;你們社區平均每戶年收入兩千萬&#xff0c;那么你家是有錢還是沒錢&am…

深度學習 | 多類交叉熵(Categorical Cross Entropy)詳解 + Python實現

在多分類任務中&#xff0c;模型輸出一個概率分布&#xff0c;常用的損失函數是 Categorical Cross Entropy&#xff08;多類交叉熵&#xff09;。本文將帶你理解其數學本質、應用場景、數值穩定性及完整 Python 實現。&#x1f4d8; 一、什么是 Categorical Cross Entropy&…

MyBatis-Plus通用中等、大量數據分批查詢和處理

函數式接口 獲取分頁數據接口 主要用于獲取數據 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;FunctionalInterface public interface MyBatisPlusPageFunctionInterface<T> {Page<T> selectPage(Page<T> page);}數據處理接口 import…

Ps 2025安裝包(Adobe Photoshop 2025)安裝包免費免激活版下載 附圖文詳細安裝教程

[軟件名稱]&#xff1a;Ps2025 V26.3 [軟件大小]&#xff1a;4.86 G [系統要求]&#xff1a;支持Win7及更高版本 [夸克網盤下載https://pan.quark.cn/s/d35677af9ef9 &#xff08;建議用手機保存到網盤后&#xff0c;再用電腦下載&#xff09;更多免費軟件見https://docs.qq.co…

Codeforces Round 1037 (Div. 3)(補題)

文章目錄前言A.Only One DigitB.No Casino in the MountainsC. I Will Definitely Make ItD.This Is the Last TimeE.G-C-D, Unlucky!總結前言 感覺前四道&#xff0c;就是考對于題目的理解能力&#xff0c;以及自己的模擬能力 A.Only One Digit 題目傳送門&#xff1a;Only …

基于單片機智能插座設計/智能開關

傳送門 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目速選一覽表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目功能速覽 概述 隨著我國的電子計算機技術的快速發展以及居民對現實生活的要求也在不斷提升&#xff0c;所以很多…

[Linux]git_gdb

一、git1. git 常用指令git status 查看倉庫狀態git add <文件名> 把文件添加到倉庫暫存區git commit -m "信息" 把文件加入倉庫git push 把本地倉庫同步到遠端git pull …

醫療AI與融合數據庫的整合:挑戰、架構與未來展望(下)

?? 解決方案:引入融合數據庫(Multi-modal Data Fusion DB) 醫院引入一款支持圖、向量、表、流的融合數據庫(如Oracle ADW、Milvus+PostgreSQL、或某國產平臺),完成了以下集成: 數據類型 來源系統 格式/模型 示例內容 基因組數據 NGS平臺 VCF / JSON / 圖 EGFR突變、A…

【深度強化學習】MIP-DQN 實現案例(完整Python代碼)

目錄MIP-DQN 算法概述建模基礎訓練階段&#xff08;Training&#xff09;部署階段&#xff08;Online Execution&#xff09;DNN 網絡轉化為 MIP 表達式性能指標完整 Python 代碼實現主函數&#xff1a;random_generator_battery模型函數&#xff1a;MIP_DQN基礎/專用庫包安裝模…

微信小程序 wx.request() 的封裝

基于微信小程序的wx.request()方法封裝下面是一個封裝方案&#xff0c;滿足您提出的所有要求&#xff1a;class HttpService {constructor() {this.baseUrl ; // 基礎URLthis.pendingRequests new Map(); // 請求緩存池this.interceptors {request: [],response: []};}// 設…

yolo8實時識別目標(和平精英敵人+骨骼關鍵點)

現在需要識別人物的肢體&#xff08;姿態/骨骼關鍵點&#xff09;&#xff0c;即所謂的「姿態估計&#xff08;pose estimation&#xff09;」&#xff0c;以下是一些主流、訓練好可直接使用的開源模型推薦&#xff0c;支持多人識別與骨骼關鍵點檢測&#xff0c;適合你后續用于…