
文章目录第一天基础语法快速掌握1.1 环境配置30分钟下载安装包运行勾选Add to PATH1.2 第一个程序30分钟1.3 基础语法要点3小时数据类型控制结构函数基础第二天核心概念突破2.1 面向对象编程2小时2.2 错误处理1小时2.3 集合操作2小时2.4 文件IO1小时第三天项目实战应用3.1 并发编程2小时3.2 实战项目学生管理系统4小时3.3 调试与优化2小时学习资源速查表第一天基础语法快速掌握转载自猫哥的博客https://blog.csdn.net/qq88641.1 环境配置30分钟步骤一安装仓颉SDKWindows,参考文章《仓颉语言编程入门第一个 Windows 下的仓颉应用程序》https://blog.csdn.net/yyz_1987/article/details/151610900?spm1001.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, 仓颉!)// 打印语句// 变量声明letname新同学// 类型推断varage:Int6420// 显式类型// 字符串插值println(我叫${name}今年${age}岁)}运行程序cjc hello.cj-ohello./hello1.3 基础语法要点3小时数据类型importstd.collection.*main(){println(Hello World)leta:Int6442// 整数letb3.14// 自动推断为Float64letc:Booltrue// 布尔值lets仓颉// 字符串letarr[1,2,3]// 数组println(arr)letarr1(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} // 错误暂无标准字典类型letdictHashMapString,Int64([(a,0),(b,1),(c,2)])//暂无字典类型有这个HashMap,需引入std.collection.*println(dict)}控制结构// if条件letscore85if(score90){println(优秀)}elseif(score60){println(及格)}else{println(不及格)}// for循环for(iin0..5){// 范围0到4println(i)}// while循环varn3while(n0){println(n)n-1}函数基础// 定义函数funcgreet(name:String):String{returnHello, ${name}!}// 调用函数println(greet(World))今日任务完成环境配置编写并运行第一个程序练习所有基础语法示例实现一个简易计算器加减乘除第二天核心概念突破2.1 面向对象编程2小时// 类定义classStudent{// 属性varname:Stringvarage:Int64// 构造函数init(name:String,age:Int64){this.namenamethis.ageage}// 方法funcintroduce(){println(我是${name}今年${age}岁)}}main(){println(Hello World)// 使用类letstuStudent(张三,20)stu.introduce()}2.2 错误处理1小时文档地址https://cangjie-lang.cn/docs?url%2F1.0.1%2Fuser_manual%2Fsource_zh_cn%2Ferror_handle%2Fexception_overview.htmlimportstd.collection.*openclassFatherException:Exception{publicinit(){super(This is FatherException.)}publicinit(message:String){super(message)}publicopen funcgetClassName():String{FatherException}}classChildTest:FatherException{publicinit(){super(This is ChildException.)}publicoverride funcgetClassName():String{ChildException}// 可能抛出错误的函数funcsafeDivide(a:Int64,b:Int64):Int64{if(b0){throwIllegalArgumentException(Division by zero)}returna/b}}main(){println(Hello World)// 错误捕获try{lettestChildTest()println(test.safeDivide(10,2))// 输出: 5test.safeDivide(10,0)// 抛出异常}catch(e:IllegalArgumentException){println(错误: ${e.message})0// 显式返回 Int64}}2.3 集合操作2小时importstd.collection.*main(){println(Hello World)leta:Int6442// 整数letb3.14// 自动推断为Float64letc:Booltrue// 布尔值lets仓颉// 字符串letarr[1,2,3]// 数组println(arr)letarr1(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} // 错误暂无标准字典类型letdictHashMapString,Int64([(a,0),(b,1),(c,2)])//暂无字典类型有这个HashMap,需引入std.collection.*println(dict)letnumbers[1,2,3,4,5]// 高阶函数letsquaresnumbers.map({xx*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() 的函数式风格// 这种函数式风格是仓颉语言处理集合的标准方式与许多其他语言的方法调用风格不同需要特别注意。letevensnumbers|filter({xx%20})|collectArrayprintln(evens)// 输出: [2, 4]letsumnumbers|fold(0,{acc,xaccx})println(sum)// 输出: 15}2.4 文件IO1小时importstd.collection.*importstd.fs.*importstd.io.*main(){println(Hello World)// 写入文件letdataHello, Cangjie!try{try(fileFile(test.txt,Write)){file.write(data.toArray())}}catch(e:FSException){println(文件写入失败: ${e.message})}// 读取文件全部内容返回字节数组letbytesFile.readFrom(test.txt)// 转换为字符串letcontentString.fromUtf8(bytes)println(content)// 按行读取文件适合大文件try(fileFile(test.txt,Read)){letreaderStringReader(file)// 逐行读取while(true){letlinereader.readln()if(lineNone){break}println(line.getOrThrow())}}//按字节块读取灵活控制try(fileFile(test.txt,Read)){letbufferArrayByte(1024,repeat:0)// 1KB缓冲区while(true){letbytesReadfile.read(buffer)if(bytesRead0){break}// 处理读取的数据letchunkString.fromUtf8(buffer.slice(0,bytesRead))print(chunk)}}}今日任务创建Student类并添加方法实现带错误处理的除法计算器练习集合的各种操作编写文件读写程序第三天项目实战应用3.1 并发编程2小时文档地址https://cangjie-lang.cn/docs?url%2F1.0.1%2Fuser_manual%2Fsource_zh_cn%2Fconcurrency%2Fconcurrency_overview.html// 协程示例funcfetchData(url:String){sleep(Duration.millisecond*500)// 模拟耗时println(从${url}获取数据完成)}main(){println(开始执行)// 启动协程lettask1spawn{fetchData(api/data1)}lettask2spawn{fetchData(api/data2)}// 等待完成task1.get()task2.get()println(全部完成)}3.2 实战项目学生管理系统4小时功能需求添加学生信息查询学生列表按成绩排序数据持久化存储核心代码结构importstd.collection.*// 类定义classStudent{// 属性varname:Stringvarage:Int64// 构造函数init(name:String,age:Int64){this.namenamethis.ageage}// 方法funcintroduce(){println(我是${name}今年${age}岁)}}classStudentManager{//仓颉语言的 Array 被设计为不可变集合,注意动态数组得用ArrayListvarstudentsArrayListStudent()// 创建可变数组funcaddStudent(name:String,score:Int64){students.add(Student(name,score))// 使用add方法}funclistStudents(){students.toArray()|forEach{s:Studentprintln(s.name)}// 或者for(sinstudents){println(s.name)}}funcsaveToFile(path:String){}}main(){println(Hello World)// 使用类letstuStudent(张三,20)stu.introduce()letmangStudentManager()mang.addStudent(yang,23)mang.listStudents()}3.3 调试与优化2小时性能分析cjc--profilemyapp.cj三日成果检验能独立编写基础程序理解面向对象核心概念完成学生管理系统掌握基本调试方法学习资源速查表资源类型推荐内容链接官方文档语言规范cangjie-lang.cn/docs在线练习交互教程codingground/cangjie开源项目学生管理系统GitHub:cangjie-starter社区支持QA论坛forum.cangjie-lang.cn学习建议每天保证3-4小时专注学习时间每个语法点都要动手实践遇到问题及时查阅文档完成项目后尝试扩展功能按照这个计划三天后你将能够理解仓颉语言的核心特性开发基础应用程序使用常用标准库功能为进一步学习打下坚实基础现在就开始你的仓颉编程之旅吧记住编程的精髓在于实践写代码是最好的学习方式。