1.初识ArkTS 语言

1.ArKTS是什么

ArKTs是Harmony OS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,保持了TS的基本风格,同时通过规范定义强化开发期静态检查和分析,提升程序执行稳定性和性能。

(就是在TS的基础上增加了一些新的特性)

2.ArkTS的编程规范

// 类名
class User {
  username: string

  constructor(username: string) {
    this.username = username;
  }

  sayHi() {
    console.log('hi' + this.username);
  }
}

// 枚举名
enum UserType {
  TEACHER = 0,
  STUDENT = 1
};
let msg = 'Hello world';

function sendMsg(msg: string) {
  // todo send message
}

let userName = 'Zhangsan';

function findUser(userName: string) {
  // todo find user by user name
}
const MAX_USER_SIZE = 10000;

enum UserType {
  TEACHER = 0,
  STUDENT = 1
};
//错误命名
let isNoError = true;
let isNotFound = false;

function empty() {}
function next() {}
//正确命名
let isError = false;
let isFound = true;

function isEmpty() {}
function hasNext() {}

5.使用空格缩进,禁止使用tab 字眼

//反例
let maxCount = 10, isCompleted = false;
let pointX, pointY;
pointX = 10; pointY = 0;
//正确写法
let maxCount = 10;
let isCompleted = false;
let pointX = 0;
let pointY = 0;

对于数组的遍历处理,应该优先使用Array对象方法,如:forEach(), map(), every(), filter(), find(), findIndex(), reduce(), some()。

//反例
const numbers = [1, 2, 3, 4, 5];
// 依赖已有数组来创建新的数组时,通过for遍历,生成一个新数组
const increasedByOne: number[] = [];
for (let i = 0; i < numbers.length; i++) {
  increasedByOne.push(numbers[i] + 1);
}
//正确写法
const numbers = [1, 2, 3, 4, 5];
// better: 使用map方法是更好的方式
const increasedByOne: number[] = numbers.map(num => num + 1);

控制性条件表达式常用于if、while、for、?:等条件判断中。

在控制性条件表达式中执行赋值,常常导致意料之外的行为,且代码的可读性非常差。

//反例
// 在控制性判断中赋值不易理解
if (isFoo = false) {
  ...
}
//正确写法
const isFoo = someBoolean; // 在上面赋值,if条件判断中直接使用
if (isFoo) {
  ...
}

ArkTS提供了两种数组类型的表示方式:T[]和Array<T>。为了代码的可读性,建议所有数组类型均用T[]来表示。

//反例
let x: Array<number> = [1, 2, 3];
let y: Array<string> = ['a', 'b', 'c'];
// 统一使用T[]语法
let x: number[] = [1, 2, 3];
let y: string[] = ['a', 'b', 'c'];

.......

3.从Ts到ArkTS的注意点

背景:

动态类型语言,例如JavaScript(简称JS),可以使得开发者非常快速地编写代码,但是同时,它也使得程序容易在运行时产生非预期的错误。例如在代码中,如果开发者没有检查一个值是否为undefined,那么程序有可能在运行时崩溃,给开发者造成不便。如果能在代码开发阶段检查此类问题是更有好处的。TS通过标注类型帮助开发者检查错误,许多错误在编译时可以被编译器检测出来,不用等到程序运行时。但是,即使是TS也有局限性,它不强制要求对变量进行类型标注,导致很多编译时检查无法开展。ArkTS尝试克服这些缺点,它强制使用静态类型,旨在通过更严格的类型检查以减少运行时错误

//非严格模式下的TS代码。
class Person {
  name: string // 可能为undefined

  setName(n: string): void {
    this.name = n
  }

  getName(): string {
    // 开发者使用"string"作为返回类型,这隐藏了name可能为"undefined"的事实。
    // 更合适的做法是将返回类型标注为"string | undefined",以告诉开发者这个API所有可能的返回值的类型。
    return this.name
  }
}

let buddy = new Person()
// 假设代码中没有对name的赋值,例如没有调用"buddy.setName('John')"
buddy.getName().length; // 运行时异常:name is undefined

//由于ArkTS要求属性显式初始化,代码应该像下面这样写。
class Person {
  name: string = ''//显式声明

  setName(n: string): void {
    this.name = n
  }

  // 类型为"string",不可能为"null"或者"undefined"
  getName(): string {
    return this.name
  }
}

let buddy = new Person()
// 假设代码中没有对name的赋值,例如没有调用"buddy.setName('John')"
buddy.getName().length; // 0, 没有运行时异常

强制使用静态类型确实优秀

Logo

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

更多推荐