首页/新闻资讯/正文详情

从chat4cj学Cangjie:通过Rocket.Chat客户端掌握仓颉语言10个核心特性

发布时间:2026/9/24 15:51:55 来源:云帆数科 栏目:资讯中心
从chat4cj学Cangjie:通过Rocket.Chat客户端掌握仓颉语言10个核心特性
从chat4cj学Cangjie通过Rocket.Chat客户端掌握仓颉语言10个核心特性【免费下载链接】chat4cjRocket.Chat Cangjie 语言客户端项目地址: https://gitcode.com/Cangjie-TPC/chat4cjchat4cj 是一个用Cangjie仓颉语言编写的Rocket.Chat 客户端库把聊天服务器最实用的 RestAPI——登录认证、频道管理、群组管理、消息收发全部封装成简洁易用的类。对新手来说它代码量不大、结构清晰是读一个真实项目学仓颉的理想教材。下面我们就结合这份源码带你掌握仓颉语言的 10 个核心特性 项目初印象代码在哪里先认识一下核心文件后文每个特性都会回到这些位置文件作用chat/src/main/cangjie/rest_api.cjRestAPI主类封装全部接口方法chat/src/main/cangjie/http_request_connector.cj底层 HTTP 请求连接器chat/src/main/cangjie/package.cj包声明与内部依赖entry/src/main/cangjie/rest_api_sample.cj界面示例按钮一键调用各接口entry/src/main/cangjie/rest_api_sample_entity.cj序列化实体类示例doc/feature_api.md完整 API 文档想动手的话clone 仓库后用 DevEco Studio配合 Cangjie Support 插件直接打开即可git clone https://gitcode.com/Cangjie-TPC/chat4cj特性一包系统——package 与 import仓颉用package声明文件所属的包用import引入其他包。package.cj 里可以看到包的完整形态package chat internal import httpclient4cj.* internal import encoding.json.* internal import net.http.*package chat声明本包名为chatinternal import仅包内可见的依赖把实现细节藏起来外部使用时只需一行import chat.*就能调用全部公开 API这是仓颉模块化组织代码的基本方式比所有代码堆在一个文件清晰得多。特性二类、成员变量与 init 构造器rest_api.cj 中的RestAPI类是一个标准示范public class RestAPI { private var username: String private var credentialKey: String public init(url: String, username: String, credentialKey: String) { this.username username this.credentialKey credentialKey } }三个要点一次看懂public/private访问控制成员变量默认私有init构造器初始化器支持命名参数this.xxx显式指向当前实例的成员特性三let 与 var——常量和变量的分界private let DEFAULT_TIMEOUT: Int 60000 // 常量定义后不可再改 var url users.list?query${query}fields${fields} // 变量可重新赋值let定义不可变常量var定义可变变量习惯与 Swift、Kotlin 一致编译器能自动推断类型url不需要写String${...}是字符串插值直接把变量嵌进字符串比拼接符方便特性四func 函数定义与返回值// 获取已加入的频道列表 public func joinListChannel(): String { let response this.httpRequestConnector.get(channels.list.joined, ) return response.toJsonString() }用func声明函数参数名: 类型写在括号里冒号后面跟返回类型如: String无返回值可写: Unit或省略这个调用连接器 → 转成 JSON 字符串 → 返回的三段式结构在RestAPI类里重复了上百次非常适合作为入门阅读模板特性五Option 可选类型——优雅应对缺失数据解析 JSON 时字段可能缺失仓颉用Option类型表达可能有、也可能没有。登录逻辑中就有一处经典用法rest_api.cjif (let Some(body) - json_data.get(body)) { let bodyObj body.asObject() let data (bodyObj.get(data).getOrThrow() as JsonObject).getOrThrow() let authToken (data.get(authToken).getOrThrow() as JsonString).getOrThrow().getValue() this.httpRequestConnector.setUserData(authToken.getValue(), userId.getValue()) }let Some(body) - ...是仓颉的解构绑定值是Some就绑定给body并执行代码块是None则直接跳过从语言层面规避空指针问题。配合getOrThrow()取值失败抛异常数据访问既安全又直接。特性六match 模式匹配——告别冗长 if-elsehttp_request_connector.cj 里按 HTTP 方法分发请求match写得非常干净match (method) { case GET requestBuilder.get() case POST requestBuilder.post( RealRequestBody.create(MediaType.get(application/json; charsetutf-8), data)) case DELETE requestBuilder.delete(...) case _ throw Exception(Unsupported HTTP method: ${method}) }每个case匹配一种情况后面写要执行的动作case _是兜底分支类似 Java 的defaultmatch还能匹配类型如case data: DataModelStruct 比 if-else 链更不易漏判特性七try/catch 异常处理try { let response this.httpRequestConnector.get(url, ) return response.toJsonString() } catch (e: Exception) { return handleException(e) }写法与 Java 几乎一致catch里可以注明异常类型更值得学的是兜底思路handleException把异常转成格式统一的 JSONsuccess、code、errmsg三个字段保证 API 无论成败返回结构都一致调用方解析起来省心特性八泛型与标准库集合示例代码里到处是泛型容器rest_api_sample.cjvar active: Bool true var roles: ArrayString [user] // 字符串数组 let visitor Visitor(访客小明, 111xx.com, aaa, 13611111111, [CustomFields(address, A省B市C区XXX, true)]) // 对象数组 var token: ArrayListString ArrayListString(1) // 动态列表ArrayT/ArrayListT是泛型容器尖括号里写元素类型标准库的JsonObject、JsonArray负责 JSON 构建put和add是出现频率最高的两个操作字面量数组[...]直接书写简洁直观特性九: 继承特质与序列化rest_api_sample_entity.cj 中的实体类展示了仓颉的实现/继承语法:public class PostMessageData : SerializablePostMessageData { var channel: String var text: String public func serialize(): DataModel { return DataModelStruct() .add(fieldString(channel, channel)) .add(fieldString(text, text)) } }:表示实现某个特质trait这里实现SerializablePostMessageDataserialize()把字段逐个登记进统一的DataModel之后一行data.serialize().toJson().asObject().toJsonString()就能产出接口要的 JSON 字符串——这就是示例代码里所有按钮对象变 JSON的统一套路特性十spawn 协程——UI 不卡死的关键网络请求绝不能阻塞界面。示例代码统一用spawn把调用丢到后台协程rest_api_sample.cjimport ohos.concurrency.launch .onClick { spawn { let res restAPI.login() Hilog.info(0, RestAPI, res:${res}) } }{ ... }是匿名函数闭包写法spawn { ... }启动一个轻量协程界面保持流畅这是仓颉结构化并发的入门形态代码仍是顺序书写却没有线程管理的烦恼学习路线小结按这个顺序通读一遍10 个特性就都落袋为安了 ✅顺序文件收获1chat/src/main/cangjie/package.cj包与导入2chat/src/main/cangjie/rest_api.cj类、函数、Option、try/catch3chat/src/main/cangjie/http_request_connector.cjmatch、构造器、常量4entry/src/main/cangjie/rest_api_sample_entity.cj泛型、序列化特质5entry/src/main/cangjie/rest_api_sample.cj闭包、spawn 并发、UI 调用chat4cj 的价值不只是能调 Rocket.Chat更在于它用不到千行的代码把仓颉语言面向对象、类型安全、并发协程的特点都自然地展示了出来。读完它再去写自己的第一个仓颉项目会轻松很多 【免费下载链接】chat4cjRocket.Chat Cangjie 语言客户端项目地址: https://gitcode.com/Cangjie-TPC/chat4cj创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

OpenCV contrib 人脸关键点检测实战:用 Facemark API 在视频中逐帧定位人脸关键点
OpenCV contrib 人脸关键点检测实战:用 Facemark API 在视频中逐帧定位人脸关键点

计算机视觉图像处理深度学习机器学习 【免费下载链接】opencv_contrib Repository for OpenCVs extra modules 项目地址: https://gitcode.com/gh_mirrors/op/opencv_contrib 点击查看 免费下载 本教程基于 OpenCV 扩展模块(opencv_contrib)… · 2026/9/24 15:51:55

TorchAir Converter开发教程:register_fx_node_ge_converter详解,让缺失算子快速入图
TorchAir Converter开发教程:register_fx_node_ge_converter详解,让缺失算子快速入图

TorchAir Converter开发教程:register_fx_node_ge_converter详解,让缺失算子快速入图 【免费下载链接】torchair TorchAir 支持用户基于PyTorch框架和torch_npu插件在昇腾NPU上使用图模式进行推理。 项目地址: https://gitcode.com/Ascend/torchair … · 2026/9/24 15:51:36

近日美股(尤其纳斯达克)的走强中,半导体尤其是存储/DRAM相关板块表现突出,是重要领涨力量之一,但并非唯一因素。
近日美股(尤其纳斯达克)的走强中,半导体尤其是存储/DRAM相关板块表现突出,是重要领涨力量之一,但并非唯一因素。

近几日(约9月17–22日)美股(尤其纳斯达克)的走强中,半导体尤其是存储/DRAM相关板块表现突出,是重要领涨力量之一,但并非唯一因素。近期市场概况大盘:纳指多次走强并创新高&#xff0… · 2026/9/24 15:51:36

grammars-v4 中 Python 语法的 C++ 目标适配指南:transformGrammar 脚本与基类深度解析
grammars-v4 中 Python 语法的 C++ 目标适配指南:transformGrammar 脚本与基类深度解析

编程语言编译器开发工具 【免费下载链接】grammars-v4 Grammars written for ANTLR v4; expectation that the grammars are free of actions. 项目地址: https://gitcode.com/gh_mirrors/gr/grammars-v4 点击查看 免费下载 本篇技术指南围绕 python/python/Cpp/RE… · 2026/9/24 16:29:20

React Static 配置完全指南:深入 `static.config.js` 的每一项参数
React Static 配置完全指南:深入 `static.config.js` 的每一项参数

React Static 配置完全指南:深入 static.config.js 的每一项参数 【免费下载链接】react-static ⚛️ 🚀 A progressive static site generator for React. 项目地址: https://gitcode.com/gh_mirrors/re/react-static static.config.js 是 React… · 2026/9/24 16:29:14

G6 网格线插件(GridLine)完全指南:画布对齐辅助线的配置、跟随模式与实现原理
G6 网格线插件(GridLine)完全指南:画布对齐辅助线的配置、跟随模式与实现原理

数据可视化前端图表库 【免费下载链接】G6 ♾ A Graph Visualization Framework in JavaScript. 项目地址: https://gitcode.com/gh_mirrors/g6/G6 点击查看 免费下载 GridLine 是 G6 内置的画布辅助线插件,通过绘制可定制的网格背景,帮助用… · 2026/9/24 16:29:14

PiKVM 自定义命令按钮实战:KVMD 3.36 的 pseudo-GPIO CMD 驱动与 Web 菜单集成指南
PiKVM 自定义命令按钮实战:KVMD 3.36 的 pseudo-GPIO CMD 驱动与 Web 菜单集成指南

文档教程 【免费下载链接】pikvm Open and inexpensive DIY IP-KVM based on Raspberry Pi 项目地址: https://gitcode.com/gh_mirrors/pi/pikvm 点击查看 免费下载 KVMD 3.36 为 PiKVM 的 Web 界面菜单引入了期待已久的"自定义命令按钮"功能&#xff1a… · 2026/9/24 16:29:14

2026智能门锁技术趋势:从指纹识别到3D人脸与主动防御
2026智能门锁技术趋势:从指纹识别到3D人脸与主动防御

智能门锁看起来是一个消费电子产品,但从技术结构来看,它实际上是由身份识别、嵌入式控制、机电执行、传感器、网络通信和安全策略组成的一套门禁系统。过去智能门锁的核心是“电子化开锁”,而现在产品开始加入3D人脸、掌静脉、可视猫眼、异常… · 2026/9/24 16:29:14

WanVideo视频生成3步上手:ComfyUI节点从安装到出片的完整指南
WanVideo视频生成3步上手:ComfyUI节点从安装到出片的完整指南

WanVideo视频生成3步上手:ComfyUI节点从安装到出片的完整指南 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper ComfyUI-WanVideoWrapper 是 ComfyUI 里的一套视频生成节点&#xff0c… · 2026/9/24 16:29:02

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码