仓颉小智实践清单:数字、字符串、元组、数组与Option可选类型完全解析(附可运行示例)
【免费下载链接】仓颉小智项目地址: https://gitcode.com/Cangjie-TPC/cangjiexiaozhi
仓颉小智(Cangjie-TPC / cangjiexiaozhi)是一个基于大模型 + RAG 知识库的仓颉语言智能助手,本仓库通过 docs/dev_guide.md 等文档为模型提供仓颉语言开发知识库,并配套 IDEA 插件 plugins/idea/。本文从新手视角出发,带你一次性吃透仓颉语言最基础的 5 类核心数据类型:数字、字符串、元组、数组与 Option 可选类型,并附上可直接运行的示例代码。
数字类型:整数与浮点数的正确打开方式 🧮
仓颉的整数分为有符号(Int8~Int64、IntNative)和无符号(UInt8~UInt64、UIntNative),完整表示范围见整数类型章节。浮点数则提供Float16、Float32、Float64三种精度。
新手记忆清单:
- 整数字面量无类型上下文时,默认推断为
Int64,无需手动转换 - 支持二进制(
0b)、八进制(0o)、十六进制(0x)前缀,还可用_分隔位数 - 可用后缀精确指定类型:
100i8(Int8)、0x10u64(UInt64)、3.14f32(Float32)
var x = 100i8 // Int8 var y = 0x10u64 // UInt64,值为 16 var z = 0o432i32 // Int32,值为 282 let a: Float32 = 3.14 let e: Float64 = 0x1p2 // 十六进制浮点,值为 4.0💡 提示:值超出类型范围时编译器会直接报错,例如
let x: Int8 = 128是非法的,这能帮你提前发现溢出隐患。
更多字面量细节可查阅浮点类型章节。
字符串类型:三种字面量与 ${} 插值一步到位 📝
仓颉的String由 Unicode 字符组成,支持单行、多行和多行原始三种字面量,字符类型则叫Rune。最实用的特性是插值字符串:用${}直接把表达式嵌进字符串,告别繁琐拼接。
let s1 = 'Hello Cangjie Lang' // 单行字面量 let s2 = ''' Hello, Cangjie Lang''' // 多行字面量 let s3 = ##'#'\n'## // 多行原始字面量,\n 不会被转义 let fruit = "apples" let count = 10 println("There are ${count * count} ${fruit}") // 输出:There are 100 apples常用操作包括判等(==)、拼接(+)、contains判断包含、split按分隔符拆分等:
let s1 = "abc" let s2 = "ABCabc" println(s2.contains(s1)) // true println(s2.split(s1)[1]) // ABC 与 abc 之间的空串字符串的完整操作列表参见字符串类型章节。
元组类型:把不同类型"打包"成不可变组合 📦
元组(Tuple)能把多个不同类型组合成一个新类型,写作(T1, T2, ..., TN),至少是二元、长度固定且整体不可变(可整体替换,不能改单个元素)。
var pi = (3.14, "PI") println(pi[0]) // 3.140000 println(pi[1]) // PI // 元组可给元素标记类型参数名,提升可读性 func getFruitPrice(): (name: String, price: Int64) { return ("banana", 10) }实践要点:
- 用
t[0]、t[1]这类常量下标访问元素,下标必须是字面量 - 类型参数名(如
name、price)只能全部写或全不写,不能混用 - 函数返回多个值时,元组是天然的"轻量返回结构"
元组规则详见元组类型章节。
数组 Array:字面量初始化与 Lambda 构造 📊
仓颉用Array<T>表示有序同类型序列,用方括号字面量即可初始化,编译器会自动推断元素类型:
var a: Array<Int64> = [0, 0, 0, 0] let b = [1, 2, 3, 3, 2, 1] // 自动推断为 Array<Int64> let c = Array<Int64>(3, repeat: 0) // 长度 3,元素全为 0 let d = Array<Int64>(3, {i => i + 1}) // 用 Lambda 初始化,元素为 1、2、3遍历用for-in,取长度用size属性(无需括号):
main() { let arr = [0, 1, 2] for (i in arr) { println("The element is ${i}") } println("The size of array is ${arr.size}") }如果长度需要动态变化,使用ArrayList<T>(需import std.collection.ArrayList)。数组的完整用法见数组类型章节。
Option 可选类型:彻底告别"空值恐慌" 🔒
Option<T>是仓颉的泛型枚举,只有两个构造器:Some(T)表示有值、None表示无值。Option<T>也可简写为?T:
let a: Option<Int64> = Some(100) let b: ?Int64 = None let c: Option<String> = "100" // 上下文已知为 Option 时可直接赋值 let d = None<Int64> // 无类型上下文时用 None<T> 显式指定仓颉提供了 4 种解构 Option 的常用姿势:
| 方式 | 写法 | 说明 |
|---|---|---|
| 模式匹配 | match (a) { case Some(x) => ... case None => ... } | 显式区分有值/无值 |
| 合并操作符 | a ?? 0 | 为None时返回默认值 |
| 问号操作符 | a?.toString() | 链式安全访问,中间任一环节为None则整体为None |
| getOrThrow | a.getOrThrow() | 有值返回值,None时抛异常 |
一个贴近实际的小例子——安全处理可能缺失的年龄:
main() { let age: ?Int64 = None let result = age ?? 18 // 兜底默认值 println(result) // 18 let opt = Some(5) match (opt) { case Some(x) => println("年龄是 ${x}") case None => println("年龄未知") } }Option 的完整定义与用法参见Option 类型与使用 Option两个章节。
新手速查清单 ✅
- 数字:默认
Int64;后缀i8/u64/f32等可精确指定类型 - 字符串:
${}插值 +contains/split覆盖 90% 日常需求 - 元组:
(a, b)打包异构数据,下标必须为常量字面量 - 数组:
[1, 2, 3]字面量最快;动态场景用ArrayList<T> - Option:用
?T声明可空值,用??、?.、match安全解构
以上示例均整理自仓颉语言开发指南,如需查询标准库 API 可继续参考cangjie_std_doc.md、cangjie_tools_doc.md,IDEA 插件源码在 plugins/idea/xiaozhi/src/main/kotlin/。建议把这些类型知识直接喂给仓颉小智知识库,让 AI 助手在写代码时输出更规范的仓颉代码 🚀
【免费下载链接】仓颉小智项目地址: https://gitcode.com/Cangjie-TPC/cangjiexiaozhi
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考