仓颉原生应用编程语言教程(第1期)
概述
仓颉编程语言是一款面向全场景智能的新一代编程语言,主打原生智能化、天生全场景、高性能、强安全。融入鸿蒙生态,为开发者提供良好的编程体验。
原生智能化
内嵌AgentDSL的编程框架,自然语言&编程语言有机融合;多Agent协同,简化符号表达,模式自由组合,支持各类智能应用开发。
天生全场景
轻量化可缩放运行时,模块化分层设计,内存再小也能装得下;全场景领域扩展,元编程和eDSL技术,支持面向领域声明式开发。
高性能
终端场景首款全并发 GC ,应用线程更流畅,响应更快。轻量化线程,并发性能更好,开销更少。
强安全
安全DNA融入语言设计,帮助开发者专注于业务逻辑,免于将太多精力投入到防御性编程中,编码即安全,漏洞无处藏。
特性
高效编程
仓颉支持面向对象、函数式、命令式等多种编程范式的融合,既支持面向对象编程范式的模块化和灵活性,又支持函数式编程范式的简洁性和高抽象级表达,使得开发者能够根据业务需求,选择最合适的表达方式,简洁高效地开发业务代码。
除此以外,仓颉还借鉴了现代语言中的各种优秀语言特性,包括各种声明式语法和语法糖,除了能让通用场景的编程更加简洁,还可以针对特定场景快速设计领域特定语言(DSL),以提升领域易用性。
多范式
仓颉是一个典型的多范式编程语言,对过程式编程、面向对象编程和函数式编程都提供了良好的支持,包括值类型、类和接口、泛型、代数数据类型和模式匹配,以及函数作为一等公民等特性支持。
类和接口
仓颉支持使用传统的类(class)和接口(interface)来实现面向对象范式编程。仓颉语言只允许单继承,每个类只能有一个父类,但可以实现多个接口。每个类都是Object的子类(直接子类或者间接子类)。此外,所有的仓颉类型(包括Object)都隐式的实现Any接口。
仓颉提供open修饰符,来控制一个类能不能被继承,或者一个对象成员函数能不能被子类重写(override)。
在下面的例子中,类 B 继承了类 A,且同时实现了接口 I1 和 I2。为了让 A 能够被继承,它的声明需要被open修饰。类 A 中的函数f也被open修饰,因此可以在 B 中被重写。对函数f的调用会根据对象具体的类型来决定执行哪个版本,即动态派遣。
open class A {
let x: Int = 1
var y: Int = 2
open func f(){
println("function f in A")
}
func g(){
println("function g in A")
}
}
interface I1 {
func h1()
}
interface I2 {
func h2()
}
class B <: A & I1 & I2 {
override func f(){
println("function f in B")
}
func h1(){
println("function h1 in B")
}
func h2(){
println("function h2 in B")
}
}
main() {
let o1: I1 = B()
let o2: A = A()
let o3: A = B()
o1.h1() // "function h1 in B"
o2.f() // "function f in A"
o3.f() // 动态派遣,"function f in B"
o3.g() // "function g in A"
}
仓颉的 interface 之间也可以继承,并且不受单继承的约束,即一个 interface 也可以继承多个父 interface。如下示例,I3可以同时继承I1和I2。因此,若要实现I3,需要提供对f、g和h三个函数的实现。
interface I1 {
func f(x: Int): Unit
}
interface I2 {
func g(x: Int): Int
}
interface I3 <: I1 & I2 {
func h(): Unit
}

浙公网安备 33010602011771号