新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/11/5 1:05:18来源:尧图网络
从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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/4 15:56:54

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/4 22:55:41

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/4 17:01:23

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/4 12:33:12

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/4 1:25:31

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/4 3:51:11

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉