ArkTS 是 HarmonyOS 应用开发的官方高级语言。ArkTS 在 TypeScript(简称 TS)生态基础上做了进一步扩展,保持了 TS 的基本风格,同时通过规范定义强化开发期静态检查和分析,提升代码健壮性,并实现更好的程序执行稳定性和性能。ArkTS 同时也支持与 TS/JavaScript(简称 JS)高效互操作,兼容 JS/TS 生态。
为更好地支持 HarmonyOS 应用的开发和运行,从 Harmony OS NEXT Developer Preview 0 版本开始,ArkTS 在 TS 的基础上,进一步通过规范强化静态检查和分析,这样做有两个好处:1.许多错误在编译时可以被检测出来,不用等到运行时,这大大降低了代码运行错误的风险,有利于程序的健壮性;2.减少运行时的类型检查,从而降低了运行时负载,有助于提升执行性能。
ArkTS 保留了 TS 大部分的语法特性,这可以帮助你更容易上手 ArkTS。同时,对于已有的标准 TS 代码,你仅需对少部分代码进行 ArkTS 语法适配,大部分代码可以直接复用。
ArkTS 支持与标准 JS/TS 的高效互操作,兼容 JS/TS 生态。HarmonyOS 也提供了标准 JS/TS 的执行环境支持,在“更注重已有生态直接复用”的场景下,你可以选择使用标准 JS/TS 进行代码复用或开发,更方便兼容现有生态。
ArkTS 通过规范约束了 TS 中过于灵活而影响开发正确性或者给运行时带来不必要额外开销的特性,下面通过代码片段说明部分约束特性。
// TypeScript代码片段
class Point{
public x: number
public y: number
constructor(x: number, y: number) {
this.x =X
this.y =y
//case1
let p1 = new Point(1.0, 1.0);
delete p1.× // 在ArkTS中,编译时错误,不允许删除属性
// case2
let p2 = new Point(2.0, 2.0);
P2.z = 2.0// 在ArkTS中,编译时错误,不允许添加属性
/ case3
let p3 = new Point(3.0, 3.0);
p3.x ='Hello!' // 在ArkTS中,编译时错误,不允许赋值其他类型
}
以下TS 代码片段展示了如何在运行时通过添加和删除某些属性来更改对象的布局。运行时支持此类特性需要大量的性能开销,ArkTS 不支持在运行时更改对象的布局。
在 ArkTS 中,可以使用可选属性和给该属性赋值 undefined 的方式来替代。
// TypeScript代码片段
const point = { // 在ArkTS中,编译时错误,必须标注类型
×: 0,
y: 0
}
// ArkTS代码片段
interface Point {
x:number,
y:number
}
const point: Point ={
×:0,
y:0
}
//TypeScript代码
class C{
s: string =""
}
class D{
n: number = 0
S: string ="
}
function foo(c: C){
console.log(c.s)
}
foo(new D()) //在ArkTS中,编译时错误,不支持structural typing
以上 TS 代码片段展示了 structural typing 特性。在 ArkTS 已经采用了 nominal typing 类型系统的前提下,如果额外支持 structural typing 给语言实现和开发者均会带来不必要的复杂度。在示例中,foo 虽然声明参数类型是 C,但也可以传递类型 D 的变量,这种灵活性可能不符合开发者的意图,容易带来程序行为的正确性问题。另外,由于类型 D 和类型 C 布局不同,那么 foo 中对 c.s 这个属性访问就不能被优化成根据固定偏移量访问的方式,从而给运行时性能造成瓶颈。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。