三天上手仓颉编程语言开发:极速入门指南
2025-09-22 14:03:16
119次阅读
0个评论
第一天:基础语法快速掌握
1.1 环境配置(30分钟)
步骤一:安装仓颉SDK Windows,参考文章《仓颉语言编程入门:第一个 Windows 下的仓颉应用程序》https://blog.csdn.net/yyz_1987/article/details/151610900?spm=1001.2014.3001.5502
下载安装包运行,勾选"Add to PATH"
**步骤二:验证安装**
```bash
cjc --version
# 应输出类似:cangjie 1.0.0
步骤三:配置VSCode插件(可选)
- 安装官方插件"Cangjie Language Support"
- 启用语法高亮和代码补全
1.2 第一个程序(30分钟)
创建hello.cj
文件:
// 单行注释
main() {
println("Hello, 仓颉!") // 打印语句
// 变量声明
let name = "新同学" // 类型推断
var age: Int64 = 20 // 显式类型
// 字符串插值
println("我叫${name},今年${age}岁")
}
运行程序:
cjc hello.cj -o hello && ./hello
1.3 基础语法要点(3小时)
数据类型
import std.collection.*
main() {
println("Hello World")
let a: Int64 = 42 // 整数
let b = 3.14 // 自动推断为Float64
let c: Bool = true // 布尔值
let s = "仓颉" // 字符串
let arr = [1, 2, 3] // 数组
println(arr)
let arr1 = (1, 2, 3) // 元组
//println(arr1)
// 正确打印元组的方式
println("${arr1[0]}, ${arr1[1]}, ${arr1[2]}") // 手动访问每个元素
// 或者分开打印
println(arr1[0])
println(arr1[1])
println(arr1[2])
//let dict = {"a": 1, "b": 2} // 错误,暂无标准字典类型
let dict = HashMap<String, Int64>([("a", 0), ("b", 1), ("c", 2)]) //暂无字典类型,有这个HashMap,需引入std.collection.*
println(dict)
}
控制结构
// if条件
let score = 85
if (score >= 90) {
println("优秀")
} else if (score >= 60) {
println("及格")
} else {
println("不及格")
}
// for循环
for (i in 0..5) { // 范围0到4
println(i)
}
// while循环
var n = 3
while (n > 0) {
println(n)
n -= 1
}
函数基础
// 定义函数
func greet(name: String): String {
return "Hello, ${name}!"
}
// 调用函数
println(greet("World"))
今日任务:
- 完成环境配置
- 编写并运行第一个程序
- 练习所有基础语法示例
- 实现一个简易计算器(加减乘除)
第二天:核心概念突破
2.1 面向对象编程(2小时)
// 类定义
class Student {
// 属性
var name: String
var age: Int64
// 构造函数
init(name: String, age: Int64) {
this.name = name
this.age = age
}
// 方法
func introduce() {
println("我是${name},今年${age}岁")
}
}
main() {
println("Hello World")
// 使用类
let stu = Student("张三", 20)
stu.introduce()
}
2.2 错误处理(1小时)
import std.collection.*
open class FatherException <: Exception {
public init() {
super("This is FatherException.")
}
public init(message: String) {
super(message)
}
public open func getClassName(): String {
"FatherException"
}
}
class ChildTest <: FatherException {
public init() {
super("This is ChildException.")
}
public override func getClassName(): String {
"ChildException"
}
// 可能抛出错误的函数
func safeDivide(a: Int64, b: Int64):Int64 {
if (b == 0) {
throw IllegalArgumentException("Division by zero")
}
return a / b
}
}
main() {
println("Hello World")
// 错误捕获
try {
let test = ChildTest()
println(test.safeDivide(10, 2)) // 输出: 5
test.safeDivide(10, 0) // 抛出异常
} catch (e: IllegalArgumentException) {
println("错误: ${e.message}")
0 // 显式返回 Int64
}
}
2.3 集合操作(2小时)
import std.collection.*
main() {
println("Hello World")
let a: Int64 = 42 // 整数
let b = 3.14 // 自动推断为Float64
let c: Bool = true // 布尔值
let s = "仓颉" // 字符串
let arr = [1, 2, 3] // 数组
println(arr)
let arr1 = (1, 2, 3) // 元组
//println(arr1)
// 正确打印元组的方式
println("${arr1[0]}, ${arr1[1]}, ${arr1[2]}") // 手动访问每个元素
// 或者分开打印
println(arr1[0])
println(arr1[1])
println(arr1[2])
//let dict = {"a": 1, "b": 2} // 错误,暂无标准字典类型
let dict = HashMap<String, Int64>([("a", 0), ("b", 1), ("c", 2)]) //暂无字典类型,有这个HashMap,需引入std.collection.*
println(dict)
let numbers = [1, 2, 3, 4, 5]
// 高阶函数
let squares = numbers.map({x => x * x}) // [1, 4, 9, 16, 25]
//let evens = numbers.filter({x => x % 2 == 0}) // error: 'filter' is not a member of struct 'Array'
//let sum = numbers.fold(0, {acc, x => acc + x}) // error: 'filter' is not a member of struct 'Array'
// 在仓颉语言中,Array 类型确实没有直接提供 filter 和 fold 方法。你需要使用标准库中的函数式操作函数来实现这些功能
// 使用管道操作符 |> 和 collectArray 收集结果,map 和 filter 返回的是迭代器需要用 collectArray 转换为数组
// 管道操作符 |>:仓颉语言使用 |> 将集合传递给操作函数
// 不是 array.method() 的面向对象风格 而是 array |> function() 的函数式风格
// 这种函数式风格是仓颉语言处理集合的标准方式,与许多其他语言的方法调用风格不同,需要特别注意。
let evens = numbers |> filter({x => x % 2 == 0}) |> collectArray
println(evens) // 输出: [2, 4]
let sum = numbers |> fold(0, {acc, x => acc + x})
println(sum) // 输出: 15
}
2.4 文件IO(1小时)
import std.collection.*
import std.fs.*
import std.io.*
main() {
println("Hello World")
// 写入文件
let data = "Hello, Cangjie!"
try {
try (file = File("test.txt", Write)) {
file.write(data.toArray())
}
} catch (e: FSException) {
println("文件写入失败: ${e.message}")
}
// 读取文件全部内容(返回字节数组)
let bytes = File.readFrom("test.txt")
// 转换为字符串
let content = String.fromUtf8(bytes)
println(content)
// 按行读取文件(适合大文件)
try (file = File("test.txt", Read)) {
let reader = StringReader(file)
// 逐行读取
while (true) {
let line = reader.readln()
if (line == None) {break}
println(line.getOrThrow())
}
}
//按字节块读取(灵活控制)
try (file = File("test.txt", Read)) {
let buffer = Array<Byte>(1024, repeat: 0) // 1KB缓冲区
while (true) {
let bytesRead = file.read(buffer)
if (bytesRead <= 0) {break}
// 处理读取的数据
let chunk = String.fromUtf8(buffer.slice(0, bytesRead))
print(chunk)
}
}
}
今日任务:
- 创建Student类并添加方法
- 实现带错误处理的除法计算器
- 练习集合的各种操作
- 编写文件读写程序
第三天:项目实战应用
3.1 并发编程(2小时)
// 协程示例
func fetchData(url: String) {
sleep(Duration.millisecond * 500) // 模拟耗时
println("从${url}获取数据完成")
}
main() {
println("开始执行")
// 启动协程
let task1 = spawn { fetchData("api/data1") }
let task2 = spawn { fetchData("api/data2") }
// 等待完成
task1.get()
task2.get()
println("全部完成")
}
3.2 实战项目:学生管理系统(4小时)
功能需求:
- 添加学生信息
- 查询学生列表
- 按成绩排序
- 数据持久化存储
核心代码结构:
import std.collection.*
// 类定义
class Student {
// 属性
var name: String
var age: Int64
// 构造函数
init(name: String, age: Int64) {
this.name = name
this.age = age
}
// 方法
func introduce() {
println("我是${name},今年${age}岁")
}
}
class StudentManager {
//仓颉语言的 Array 被设计为不可变集合,注意动态数组得用ArrayList
var students = ArrayList<Student>()// 创建可变数组
func addStudent(name: String, score: Int64) {
students.add(Student(name, score)) // 使用add方法
}
func listStudents() {
students.toArray() |> forEach { s: Student => println(s.name) }
// 或者
for (s in students) {
println(s.name)
}
}
func saveToFile(path: String) {
}
}
main() {
println("Hello World")
// 使用类
let stu = Student("张三", 20)
stu.introduce()
let mang = StudentManager()
mang.addStudent("yang",23)
mang.listStudents()
}
3.3 调试与优化(2小时)
- 性能分析
cjc --profile myapp.cj
三日成果检验:
- 能独立编写基础程序
- 理解面向对象核心概念
- 完成学生管理系统
- 掌握基本调试方法
学习资源速查表
资源类型 | 推荐内容 | 链接 |
---|---|---|
官方文档 | 语言规范 | cangjie-lang.cn/docs |
在线练习 | 交互教程 | codingground/cangjie |
开源项目 | 学生管理系统 | GitHub:cangjie-starter |
社区支持 | Q&A论坛 | forum.cangjie-lang.cn |
学习建议:
- 每天保证3-4小时专注学习时间
- 每个语法点都要动手实践
- 遇到问题及时查阅文档
- 完成项目后尝试扩展功能
按照这个计划,三天后你将能够:
- 理解仓颉语言的核心特性
- 开发基础应用程序
- 使用常用标准库功能
- 为进一步学习打下坚实基础
现在就开始你的仓颉编程之旅吧!记住,编程的精髓在于实践,写代码是最好的学习方式。
10
- 4回答
- 6粉丝
- 5关注
相关话题
- uniapp 极速上手鸿蒙开发
- 仓颉语言编程入门:第一个 Windows 下的仓颉应用程序
- 仓颉编程语言已正式开源
- 【HarmonyOS】鸿蒙使用仓颉编程入门
- 从零到精通:仓颉编程语言全方位学习资源指南 | 尽在 GitCode
- 仓颉编程语言学习资源全汇总【坚果派】
- 华为仓颉语言初识:并发编程之线程的基本使用
- 华为仓颉语言初识:并发编程之同步机制(上)
- 华为仓颉语言初识:并发编程之同步机制(下)
- 三文带你轻松上手鸿蒙的AI语音01-实时语音识别
- 三文带你轻松上手鸿蒙的AI语音03-文本合成声音
- 鸿蒙next团结引擎适配轻松上手
- 轻松上手-骨架屏后动画显示
- 轻松上手-Navigation路由H5
- 模拟器快速上手,助力HarmonyOS应用/服务高效开发