当前位置:   article > 正文

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

鸿蒙开发培训,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 声明的常量是不可变的,初始化后值不能被改变。

  1. function getData() {
  2. let name = "ByteCode";
  3. name = "DHL"; // ok
  4. const age = 18;
  5. age = 20; // 错误:Cannot assign to 'age' because it is a constant.
  6. }

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

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

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

const number = 1;

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

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

  1. const language: string[] = ['ArkTs', 'Java', 'Kotlin'];
  2. language[0] = "ByteCode"; // ok
  3. const people: string[] = ['zhangsan', 'xiaohong', 'xiaoming'];
  4. language = people; // 错误

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

let 和 const 的相同之处

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

  1. if (true) {
  2. let age = 18; // age 只在 if 语句内有效
  3. }
  4. if (true) {
  5. const name = "DHL"; // name 只在 if 语句内有效
  6. }
  7. try {
  8. //
  9. } catch (e) {
  10. // 变量 e 只能在 catch 范围内
  11. }

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

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

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

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

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

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

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

  1. if(true){
  2. let a = 1;
  3. let a = 2; // 报错
  4. const b = 3;
  5. const b = 4; // 报错
  6. }

基本数据类型

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

布尔值

  1. let isDone: boolean = false;
  2. const isDone: boolean = false;

数字

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

  1. let decLiteral: number = 6;
  2. let hexLiteral: number = 0xf00d;
  3. const binaryLiteral: number = 0b1010;
  4. const octalLiteral: number = 0o744;

字符串

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

  1. let name: string = "DHL";
  2. const publicName: string = "ByteCode";

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

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

数组

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

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

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

枚举

用 enum 表示枚举类型。

  1. export enum ResponseCode {
  2. SUCCESS = 1000,
  3. FAILED = 2000
  4. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/715943
推荐阅读
相关标签
  

闽ICP备14008679号