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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;适合你后续用于…