前言

ArkTS是鸿蒙官方推荐的编程语言,这是在TypeScript语法基础上优化而来的,可以提供更高的性能和开发效率。ArkTS对TypeScript的动态类型特性施加了更严格的限制,以减少运行时开销,提高执行效率。通过取消动态类型特性,ArkTS代码能更有效地被运行前编译和优化,从而实现更快的应用启动和更低的功耗。这也是移动端开发的大趋势。

而TypeScript是在JavaScript基础上通过添加类型定义扩展而来的,所以ArkTS与JavaScript是互通的,鸿蒙开发者可以重用TypeScript和JavaScript代码和库。

HarmonyOS从API8开始不再支持Java作为开发语言,而ArkTS作为官方主推的编程语言,是每个鸿蒙开发者都无法避开的。
今年10月8号HarmonyOS NEXT正式公测,这被称为“纯血版鸿蒙”,抛弃了Linux内核及安卓开放源代码项目(AOSP)等代码,仅支持鸿蒙内核和鸿蒙系统的应用,不再兼容安卓应用。

一、ArkTS怎么学

对于做前端开发的同学来讲ArkTS是很容易入门的,ArkTS是在TypeScript基础上优化而来的,而TypeScript又是在JavaScript基础上通过添加类型定义扩展而来的,那么有JavaScript和TypeScript基础的同学上手就很容易了,简单看一下ArkTS语法就能进行开发。需要注意的是,ArkTS提供对方舟开发框架ArkUI的声明式语法和其他特性的支持,这部分特性不在TypeScript的范围里,所以需要专门学习一下ArkUI知识。

对于Android开发老玩家来说,基本是Java入门的,那就要认真学习一下ArkTS语法了。一般Android开发也会接触过Dart和Kotlin语言,其实编程语言这些东西很多是相通的,看看ArkTS的语法基本也就能入门了。
本文就从一个Java开发者的角度记录一下我认为需要注意的语法点。

二、基础语法

1.对象字面量

ArkTS的对象字面量是用花括号包起来的“名、值”对列表,对象字面量作为一个表达式可以用于创建类实例并提供初始值,可以代替new表达式。

class C {
  n: number = 0
  s: string = ''
}

let c: C = {n: 42, s: 'foo'};

对象字面量还可以作为变量、参数、返回类型来使用

class C {
  n: number = 0
  s: string = ''
}

function foo(c: C) {}

let c: C

c = {n: 42, s: 'foo'};  // 使用变量的类型
foo({n: 42, s: 'foo'}); // 使用参数的类型

function bar(): C {
  return {n: 42, s: 'foo'}; // 使用返回类型
}

也可以在数组元素类型或类字段类型中使用:

class C {
  n: number = 0
  s: string = ''
}
let cc: C[] = [{n: 1, s: 'a'}, {n: 2, s: 'b'}];

Record类型的对象字面量

ArkTS的Record类型跟Java的Map类似,是名值对的映射

let map: Record<string, number> = {
  'John': 25,
  'Mary': 21,
}

map['John']; // 25

2.空安全

默认情况下,ArkTS中的所有类型都是不可为空的,也就是不能给类型赋空值
比如下面这样是错的:

let x: number = null;    // 编译时错误
let y: string = null;    // 编译时错误
let z: number[] = null;  // 编译时错误

但是ArkTS有个联合类型,将变量定义为联合类型T | null就可以赋空值了

let x: number | null = null;
x = 1;    // ok
x = null; // ok
if (x != null) { /* do something */ }

是不是很神奇?

ArkTS还有非空断言运算符 !空值合并运算符 ??,这些定义跟Kotlin差不多。

非空断言运算符:后缀运算符!可用于断言其操作数为非空。

class A {
  value: number = 0;
}

function foo(a: A | null) {
  a.value;   // 编译时错误:无法访问可空值的属性
  a!.value;  // 编译通过,如果运行时a的值非空,可以访问到a的属性;如果运行时a的值为空,则发生运行时异常
}

空值合并二元运算符??:用于检查左侧表达式的求值是否等于null或者undefined。如果是,则表达式的结果为右侧表达式;否则,结果为左侧表达式。


总结

今天学习了ArkTS的基础语法,我摘录了对于Java开发者来说可能需要注意的对象字面量空安全两个知识点,其余的内容比较容易掌握,就不在这里赘述了,没接触过的同学可以去HarmonyOS开发官网浏览一下。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐