鸿蒙开发培训,5分钟学会鸿蒙开发语言关键知识点

ArkTS 是 HarmonyOS 的主要开发语言。它在 TypeScript 的基础上进行了优化和扩展,保留了 TypeScript 的优点,同时屏蔽了其缺点,并与 ArkUI 框架一起构建了鸿蒙应用。本文将介绍 ArkTS 的相关内容。

ArkTS 的设计初衷是提高开发效率、代码质量和性能,因此需要满足以下需求:

  1. 代码需要易读易懂,因为在实际工作中,阅读代码的频率远高于编写代码。
  2. 需要以最小的功耗快速执行代码。

基于上述需求,ArkTS 强制使用静态类型。这意味着在 ArkTS 中,声明变量、函数参数和返回值时必须指定类型,并在编译时进行严格的类型检查。由于所有类型在程序运行前都是已知的,开发人员可以更容易地理解代码中的数据结构,编译器也能提前验证代码的正确性,从而减少运行时的类型检查,提高性能。

通过强制使用静态类型,ArkTS 提供了更强大的类型约束和类型推断功能,有助于在编译时捕获潜在的类型错误,提高代码的可靠性和可维护性。这种设计使得开发者能够编写更加健壮和可靠的代码。

如果不使用静态类型,可能会导致以下问题:

  1. 难以捕获类型错误:类型错误可能只能在运行时被发现,降低了代码的可靠性。
  2. 降低开发效率:静态类型可以提供更好的代码补全、类型检查和重构支持,缺少这些支持会降低开发效率。
  3. 代码维护成本高:缺少静态类型会导致代码的可读性和可维护性下降。

因此,ArkTS 在 TypeScript 的基础上进一步完善了语言缺陷,提高了性能和代码可读性。后续文章将详细分析 ArkTS 是如何屏蔽 TypeScript 的缺陷的。

由于官网对 ArkTS 的讲解较少,而 ArkTS 是开发鸿蒙应用的关键,因此我会在几篇文章中详细分析 ArkTS 的核心知识点。本文主要介绍 ArkTS 的基础知识。

变量声明

在 ArkTS 中,使用 let 和 const 来声明变量。它们有一些相同和不同之处。

let 和 const 的不同之处

let 声明的变量是可变的,可以被再次赋值,而 const 声明的常量是不可变的,初始化后值不能被改变。

function getData() {
    let name = "ByteCode";
    name = "DHL"; // ok

    const age = 18;
    age = 20; // 错误:Cannot assign to 'age' because it is a constant.
}

上面的代码中,尝试修改常量 age 的值时,编译器会提示错误,因为 age 是常量,不能被修改。

实际上,const 修饰的变量的值不能被改变,是指变量指向的内存地址所保存的数据不能改变。

对于基本数据类型(数值、字符串、布尔值等),变量指向的内存地址保存的是变量的值,因此初始化后不能被改变。

const number = 1;

上述代码中,number 指向的内存地址保存的是 number 初始化的值,因此 number 被声明后不能被改变。

对于复杂数据类型(对象和数组),变量指向的是内存地址,保存的是指向实际数据的指针,因此 const 只能保证内存地址保存的指针不能被改变,而它指向的实际数据是可以改变的。

const language: string[] = ['ArkTs', 'Java', 'Kotlin'];
language[0] = "ByteCode"; // ok

const people: string[] = ['zhangsan', 'xiaohong', 'xiaoming'];
language = people; // 错误

我们可以通过索引修改数组 language,但是不能将 language 指向另一个常量 people,否则会报错。

let 和 const 的相同之处

let 和 const 的作用域相同,都是在声明所在的块级作用域内有效。

if (true) {
    let age = 18; // age 只在 if 语句内有效
}

if (true) {
    const name = "DHL"; // name 只在 if 语句内有效
}

try {
    // 
} catch (e) {
    // 变量 e 只能在 catch 范围内
}

无论是 let 还是 const 只能在它声明所在的代码块内有效,只不过使用场景不同,比如在 for 循环中,循环变量只能使用 let 声明。

for (let i = 0; i < 10; i++) {
    // ...
}

在上面的代码中,循环变量 i 只在 for 循环体内有效,在循环体外引用就会报错。不过在 ArkTS 中不能使用 for .. in,否则会有编译警告。

这是因为在 ArkTS 中,对象的布局在编译时是确定的,且不能在程序执行期间更改对象的布局。修改对象布局会影响代码的可读性和运行时性能。

typescriptfor (let i = 0; i < 3; i++) {
    let i = 'abc';
    console.log(i);
}

以上代码可以正常运行,输出了 3 个 abc,这说明 for 循环内部声明的变量 i 和循环变量 i 不在同一个作用域,它们各自有独立的作用域。

如果在同一个作用域中,不能使用 let 或 const 重复声明相同名字的变量,例如:

if(true){
    let a = 1;
    let a = 2; // 报错

    const b = 3;
    const b = 4; // 报错
}

基本数据类型

ArkTS 支持与 TypeScript 几乎相同的数据类型,如布尔型、数字、字符串、数组和枚举等。

布尔值

let isDone: boolean = false;
const isDone: boolean = false;

数字

所有数字都是浮点数,类型为 number

let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
const binaryLiteral: number = 0b1010;
const octalLiteral: number = 0o744;

字符串

用 string 表示字符串类型,可以使用双引号(")或单引号(')声明字符串。

let name: string = "DHL";
const publicName: string = "ByteCode";

可以使用模板字符串,这种字符串用反引号包围,并以 ${expr} 形式嵌入表达式。

let name = "DHL";
const content = `My name is ${name}`;

数组

在 ArkTS 中有两种方式创建数组:

  • 元素类型后面接上 []
let list: number[] = [1, 2, 3];
  • 使用数组泛型 Array<元素类型>
let list: Array<number> = [1, 2, 3];

需要注意的是,如果可以从传递给泛型函数的参数中推断出具体类型,ArkTS 允许省略泛型类型实参。否则,需要指定泛型类型实参,否则会报错。

枚举

用 enum 表示枚举类型。

export enum ResponseCode {
    SUCCESS = 1000,
    FAILED = 2000
}
  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值