- 博客(12)
- 收藏
- 关注
原创 仓颉原生应用编程语言教程(第12期)
是一个仓颉表达式,用于初始化变量,如果标注了变量类型,需要保证初始值类型和变量类型一致。在定义局部变量或实例成员变量时,可以省略初始值,但需要标注变量类型,同时要在此变量被引用前完成初始化,否则编译会报错。如果要将仓颉程序编译为可执行文件,需要在顶层作用域中定义一个 main 函数作为程序入口,它可以有 Array<String> 类型的参数,也可以没有参数,它的返回值类型可以是整数类型或 Unit 类型。在定义仓颉变量时,可变性修饰符是必要的,在此基础上,还可以根据需要添加其他修饰符。
2025-01-03 17:12:50
458
原创 仓颉原生应用编程语言教程(第11期)
在仓颉编程语言中,开发者可以给一些程序元素命名,这些名字也被称为“标识符”,标识符分为普通标识符和原始标识符两类,它们分别遵从不同的命名规则。**原始标识符**是在普通标识符或仓颉关键字的外面加上一对反引号,主要用于将仓颉关键字作为标识符的场景。由一至多个下划线开头,后接一个英文字母,最后可接零至多个英文字母、数字或下划线。例如:cangjie、cangjie_2024_06。例如:_cangjie、_c919、_o_o。## **基本概念******### **标识符******
2024-12-25 11:41:49
214
原创 仓颉原生应用编程语言教程(第10期)
不同于普通 try 表达式,try-with-resources 表达式中的 catch 块和 finally 块均是可选的,并且 try 关键字其后的块之间可以插入一个或者多个变量定义用来申请一系列的资源对象,这些资源对象在 try-with-resources 表达式中会被自动管理起来,当某个资源发生异常或表达式结束后都会自动释放,达到安全管理资源的目的。仓颉语言为并发编程提供了一种简单灵活的方式,通过轻量化线程模型和高效易用的无锁并发对象让并发编程变得轻松,将高效并发处理的能力直接置于开发者的手中。
2024-12-19 19:14:27
1672
原创 仓颉原生应用编程语言教程(第9期)
在仓颉中,let 定义的变量是不可变变量,而像 String、enum 等类型是不可变类型,这些都是不可变思想在仓颉中的应用。在仓颉中,模式匹配支持变量绑定模式,我们可以将目标值解析到新绑定的变量中,但这个变量仍然是不可变的。在仓颉中,闭包指的自包含的函数或 lambda,闭包可以从定义它的静态作用域中捕获变量,即使对闭包调用不在定义的作用域,仍可以访问其捕获的变量。在仓颉中,所有函数形参都是不可变的,这意味着我们无法对形参赋值,如果形参是值类型,也无法修改形参的成员。视频解析“KCKCJY”
2024-12-13 14:40:23
596
原创 仓颉原生应用编程语言教程(第8期)
注意Option<T>和T是两个不同的类型,具有两种类型的值之间不能互相转换 —— 给定一个Option<T>类型的表达式e,我们只有通过模式匹配确定其值为Some(v)时(也就是说其值非空),才可以得到一个T类型的值v。相比动态类型系统,静态类型系统对开发者有更多的约束,但能够在编译期尽量早的发现程序中的错误,提高程序的安全性,同时也让程序的行为更加容易预测,为编译优化提供了更多信息,使能更多的编译优化,提升程序的性能。在仓颉中,没有提供 null 值,换句话说,仓颉的引用类型永远是非空的。
2024-12-05 10:49:49
1498
原创 仓颉原生应用编程语言教程(第7期)
这里对unless函数的调用看上去像是一种特殊的if表达式,这种语法效果是通过尾随 lambda 语法实现 —— 如果函数的最后一个形参是函数类型,那么实际调用这个函数时,我们可以提供一个 lambda 表达式作为实参,并且把它写在函数调用括号的外面。如下示例所示,开发者希望对 Point 类型的各数据成员的访问进行记录,则可以在内部声明 private 修饰的成员变量,通过声明对应的属性来对外暴露访问能力,并在访问的时候使用日志系统Logger记录它们的访问信息。仓颉允许在同一作用域内定义多个同名函数。
2024-11-25 15:29:14
590
原创 仓颉原生应用编程语言教程(第6期)
在下面的例子中,我们可以定义一个新接口Integer,然后用extend给已有的整数类型实现 Integer 接口,这样已有的整数类型就自然成为了 Integer 的子类型。注意 lambda 表达式作为map的第一个参数,它的参数类型(T)和返回值类型(R)都可以被推断出来,尽管参数类型(T)的推断还反过来依赖对map的第二个参数的类型(Array)的推断。而当扩展和接口搭配使用的时候,它更能大幅提升语言的表达能力,我们甚至可以给已有的类型添加新的继承体系。
2024-11-18 14:34:10
301
原创 仓颉原生应用编程语言教程(第5期)
数组类型在仓颉中就是典型的泛型类型应用,其语法表示为 Array<T>,其中 T 表示了元素的类型,可以被实例化为任何一个具体的类型,例如 Array<Int> 或 Array<String>,甚至可以是嵌套数组 Array<Array<Int>>,从而可以轻易地构造各种不同元素类型的数组。以数组为例,不同元素类型的数组是完全不相同的类型,它们之间不能互相赋值,哪怕元素类型之间具有父子类型关系也是禁止的。类型安全:支持更多的编译时的类型检查,避免了运行时类型错误,增强了程序的稳定性。
2024-11-15 14:35:47
1720
原创 仓颉原生应用编程语言教程(第4期)
对于给定的enum类型的表达式,我们使用match表达式来判断它是用哪个构造器构造的,并提取相应构造器的参数。绑定模式:可以将指定位置的成员绑定到新的变量,多用于解构 enum 或 tuple。上面的sumBinaryTree例子中就用到了绑定模式,将Node节点中实际的参数与三个新声明的变量v、l和r分别绑定。除此enum模式以外,仓颉也提供了其它各种模式,如常量模式、绑定模式、类型模式等,以及各种模式的嵌套使用。未来仓颉还计划引入更加丰富的模式,如序列(sequence)模式、record 模式等。
2024-11-08 10:02:47
509
原创 仓颉原生应用编程语言教程(第3期)
除了上面例子中的全局函数,对象或结构体等数据类型的成员函数同样也可以作为一等公民使用。下面的例子中,对象o的成员函数resetX作为普通表达式被赋值给变量f,对f的调用则会改变对象o中成员变量x的值。仓颉中函数可以作为普通表达式使用,可以作为参数传递,作为函数返回值,被保存在其他数据结构中,或者赋值给一个变量使用。let square = {x: Int => x * x} // lambda 表达式。let f = o.resetX // 成员函数作为一等公民。// 函数嵌套定义,以及函数作为返回值。
2024-11-01 15:08:41
190
原创 仓颉原生应用编程语言教程(第2期)
仓颉语言只允许单继承,每个类只能有一个父类,但可以实现多个接口。在下面的例子中,类 B 继承了类 A,且同时实现了接口 I1 和 I2。类 A 中的函数f也被open修饰,因此可以在 B 中被重写。仓颉的 interface 之间也可以继承,并且不受单继承的约束,即一个 interface 也可以继承多个父 interface。因此,若要实现I3,需要提供对f、g和h三个函数的实现。仓颉提供open修饰符,来控制一个类能不能被继承,或者一个对象成员函数能不能被子类重写(override)。
2024-10-28 10:15:22
483
原创 仓颉原生应用编程语言教程(第1期)
仓颉支持面向对象、函数式、命令式等多种编程范式的融合,既支持面向对象编程范式的模块化和灵活性,又支持函数式编程范式的简洁性和高抽象级表达,使得开发者能够根据业务需求,选择最合适的表达方式,简洁高效地开发业务代码。除此以外,仓颉还借鉴了现代语言中的各种优秀语言特性,包括各种声明式语法和语法糖,除了能让通用场景的编程更加简洁,还可以针对特定场景快速设计领域特定语言(DSL),以提升领域易用性。安全DNA融入语言设计,帮助开发者专注于业务逻辑,免于将太多精力投入到防御性编程中,编码即安全,漏洞无处藏。
2024-10-23 18:48:25
545
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人