一.声明
用作自我学习以及分享给大家,不做任何商业用途
大家可以通过访问下面来学习ArkTS:
点击这里
二.编程语言介绍
首先,先了解一下HarmonyOS基本开发语言ArkTS的基本概念,我们也许第一次听到这个东西,也许你会想,我去,这又是什么语言,什么是ArkTS?介绍一下。
什么是ArkTS?
ArkTS是HarmonyOS生态的应用开发语言,它提供了声明式UI范式,状态管理等相应的能力,让开发者更简洁,更自然的进行使用。同时,它在保持TypeScript(简称TS)基本语法风格的基础上,进一步通过规范强化静态检查和分析,使得程序运行之前的开发期能检测更多的错误,提升代码雄壮性,并实现更好的运行性能。针对JS/TS并发能力支持有限问题,ArkTS对并发编程API和能力进行了加强,它支持JS/TS高效互操作,兼容它俩的生态。
ArkTS基于TypeScript(简称TS)的增强,规格的代码正好保证正确性和准确性,它规范约束TS中过于灵活而影响开发正确性或者给运行时带来的不必要的额外的开销的特征,由此可在静态分析阶段获取更稳定更确定的信息,提升代码的额雄壮性和性能。它保留了公共子集,保留了好的特征和语义标准,以及增加了新的特征,更有利于开发使用效率。

ArkTS基于TypeScript的增强-规范代码更好的保证正确性和性能
下面举两个示例,可以对比的看一下,便于理解
1.强化静态类型检查
ArkTS要求所有类型在程序实际运行前都是已知的,减少运行时的类型检测,提升性能。
//TyprScript代码
const area={//在ArkTS里,这里会报错
pixles:new ArrayBuffer(8),
offset:0,
stride:8,
region:{size:{height:1,width:2
},x:0,y:0}
}
这则TypeScript展示了没有类型的场景,如果没有类型,编译器不知道变量area的类型,也就不能确定对象的布局,那么编译器就无法优化这段代码,造成性能瓶颈,没有类型也会造成其属性的类型较少,例如area.offset的类型在此时为number,但它也可以被赋值为其它类型,造成额外的运行时检查和开销。
同时,TypeScrit 是可以通过动态给一个对象新增属性或者删除一个属性的语言运行时如果支持此类特性,需要大量的性能开销
//ArkTS
import {image} from '@Kit.ImageKit';
const area : image.PositionArea={
pixels:new ArrayBuffer(8),
offset:0,
stride:8,
region:{size:{height:1,width:2},
x:0,y:0}
}
在ArkTS中,对此类型做了明确的限制,必须要声明该类型,如变量area 对应的类型是又系统对应的图片属性,这样就保证了该类型在运行的时候是明确的,减少了运行时对类型的运行检查
ArkTS中不支持使用any类型,也不支持在运行时使用delete操作符来更改对象的布局
大家可以去我的这篇文章再了解了解
三.ArkTS语言基础知识
声明
ArkTS中可以使用关键字let声明变量,使用const声明一个常量,并通过类型注释指定类型。
图解
//变量声明
let cout:number=0;
count=40;
//常量声明
const MAX_COUNT:number=100;
ArkTS中变量和常量是用于存储信息的容器,声明方式可以用以上两种关键词和形式来完成,比如说我XXX喜欢XX,我是关键词,XXX代表我叫什么,也就是变量名,喜欢是一种类型,也许我也讨厌他,这里做个说明,最后XX是结果,也就是值|对象。
类型
ArkTS的类型主要包含以下这些:
基本类型:string , number ,boolean等
引用类型:Object , Array , 自定义类型等
枚举类型:Enum
联合类型:Union
类型别名:Aliases
基本类型
主要包含字符串,数字,布尔值类型等等,例如以下示例:
let name:string='Jack';
let age:number=12;
let isMale:boolean=ture;
console.log(name); //输出Jack
console.log(age.toString()); //输出age
console.log('My name is ${name},and I am ${age} years old');
一个名字为字符串类型,一个年龄为数字类型,一个性别为布尔值,并且可以通过系统提供的console.log方法将信息打印到控制台,这里注意console.log方法需要传入的参数为字符串类型,也就是string类型,如果是数字类型,得转换成字符串类型才能打印,字符串形式也可以用两个反斜点包裹,中间可以加上${ }包含变量的形式来显示字符串,
引用类型
引用类型最典型的就是内部的数组类型,数组是将一种类型的元素,按照顺序排列到一起的容器,例如下面示例:
let Students: Array<string>=['Xiaoming','Jack','Libai'];
let Students: string[]=['Xiaoming','Jack','Libai'];
定义方式可以采用Array<string>的方式,也可以使用string[ ]的方式进行声明。
class User {...}
let user:User=new User();
自定义类都是以Object为基类,都属于引用类型,例如我们声明的一个User类也可以作为类型声明
enum Color{
Red,
Bule,
Green
}
let favouriteColor:Color = Color.red;
枚举类型可以定义定义为一组待选项,例如使用枚举类型定义颜色枚举Color,提供选择的颜色有三种,红色蓝色绿色,在使用的时候直接可以用Color.red来进行赋值
let luckyNum: number | string =7;
luckyNum='seven';
联合类型通常可能会有多个类型的情况,例如一个数字,可以使用number,也可以使用string进行赋值,使用了联合类型后,就允许变量在number和string类型中进行切换
type Matrix = number[] [];
type NullableObject = Object | null;
类型别名(Aliases)是允许给一个类型取一个别名,方便理解和复用,类型别名是用来定义现有类型的替代的名称,使用关键字typr 进行声明,当想要在上下文中使用更合适的名称来引用现有类型的时候就可以取一个更符合语义的类型名称,定义类型别名之后可以在任何使用该原始名称的地方使用别名。
例如如上面的代码一样,现在有一个二维数组,就可以起名为Matrix,一个可以为空的对象,就可以取名为NullableObject,在ArkTS中,变量的值是可以为null的,null表示为空值,当在声明变量的时候,有时候并不确定声明值应该赋值什么内容,可以使用联合类型来包含null类型,如果在使用的时候,不对可为null值的变量进行非空校验,那么在编辑或者编译的时候就会发生错误,无法正确进行。
进行非空校验有三种方法:
第一种,使用if / else进行判空
if (num!=null) {/*do something*/}
第二种,使用空值合并的方式,??左边的值为null时会返回右边的值
let name:string | null = numm;
const res = name ?? '';
第三种,使用?可选链,如果是null,运算符会返回undefined
let name :string | null = 'aa';
let len = name?.length;
访问对象属性或者方法,如果作用于null,运算符会返回undefined
ArkTS是类型编程语言,编辑器会对类型检查,实时提示错误信息,当赋值的类型与实际类型不匹配的时候,就会显示错误信息,这样就有够提高开发效率,避免编译时期发生错误,另外ArkTS还支持类型推导,在没有类型指定时候,会自动推导符合上下文的类型。