初识arkts

什么是arkts

ArkTS是HarmonyOS优选的主力应用开发语言。

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

目前流行的编程语言TypeScript是在JavaScript基础上通过添加类型定义扩展而来的,而ArkTS则是TypeScript的进一步扩展。TypeScript深受开发者的喜爱,因为它提供了一种更结构化的JavaScript编码方法。ArkTS旨在保持TypeScript的大部分语法,为现有的TypeScript开发者实现无缝过渡,让移动开发者快速上手ArkTS。

ArkTS相比TS特性差异

​ ArkTS通过规范约束了TS中过于灵活而影响开发正确性或者给运行时带来不必要额外开销的特性,下面通过代码片段说明部分约束特性。

基本知识

声明

ArkTS通过声明引入变量、常量、函数和类型。

变量声明

以关键字let开头的声明引入变量,该变量在程序执行期间可以具有不同的值。

常量声明

以关键字const开头的声明引入只读常量,该常量只能被赋值一次。对常量重新赋值会造成编译时错误。

自动类型推断:

由于ArkTS是一种静态类型语言,所有数据的类型都必须在编译时确定。

但是,如果一个变量或常量的声明包含了初始值,那么开发者就不需要显式指定其类型。ArkTS规范中列举了所有允许自动推断类型的场景。

以下示例中,两条声明语句都是有效的,两个变量都是string类型:

在这里插入图片描述

类型
Number类型
ArkTS提供number和Number类型,任何整数和浮点数都可以被赋给此类型的变量。

​ 数字字面量包括整数字面量和十进制浮点数字面量。 整数字面量包括以下类别:

​ 1.由数字序列组成的十进制整数。例如:0、117、-345

​ 2.以0x(或0X)开头的十六进制整数,可以包含数字(0-9)和字母a-f或A-F。例如:0x11230x00111、-0xF1A7

​ 3.以0o(或0O)开头的八进制整数,只能包含数字(0-7)。例如:0o777以0b(或0B)开头的二进制整数,只能包含数字0和1。例如:0b11、0b0011、-0b11

浮点字面量包括以下:

​ 1.十进制整数,可为有符号数(即,前缀为“+”或“-”);

​ 2.小数点(“.”)

​ 3.小数部分(由十进制数字字符串表示)

​ 4.以“e”或“E”开头的指数部分,后跟有符号(即,前缀为“+”或“-”)或无符号整数。

Boolean类型

boolean类型由true和false两个逻辑值组成。

通常在条件语句中使用boolean类型的变量:

String类型

string代表字符序列;可以使用转义字符来表示字符。

字符串字面量由单引号(')或双引号(")之间括起来的零个或多个字符组成。字符串字面量还有一特殊形式,是用反向单引号(`)括起来的模板字面量。

Void类型

void类型用于指定函数没有返回值。

此类型只有一个值,同样是void。由于void是引用类型,因此它可以用于泛型类型参数

Object类型

Object类型是所有引用类型的基类型。任何值,包括基本类型的值(它们会被自动装箱),都可以直接被赋给Object类型的变量。

Array类型

array,即数组,是由可赋值给数组声明中指定的元素类型的数据组成的对象。

数组可由数组复合字面量(即用方括号括起来的零个或多个表达式的列表,其中每个表达式为数组中的一个元素)来赋值。数组的长度由数组中元素的个数来确定。数组中第一个元素的索引为0。

Enum类型

enum类型,又称枚举类型,是预先定义的一组命名值的值类型,其中命名值又称为枚举常量。

使用枚举常量时必须以枚举类型名称为前缀。

Union类型

union类型,即联合类型,是由多个类型组合成的引用类型。联合类型包含了变量可能的所有类型。

可以用不同的机制获取联合类型中特定类型的值。

Aliases类型

Aliases类型为匿名类型(数组、函数、对象字面量或联合类型)提供名称,或为已有类型提供替代名称。

运算符

赋值运算符=,使用方式如x=y。

复合赋值运算符将赋值与运算符组合在一起,其中x op = y等于x = x op y。

复合赋值运算符列举如下:+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、|=、^=。

比较运算符
运算符 说明
=== 如果两个操作数严格相等(不同类型的操作数是不相等的),则返回true。
!== 如果两个操作数严格不相等(不同类型的操作数是不相等的),则返回true。
== 如果两个操作数相等(尝试先转换不同类型的操作数,再进行比较),则返回true。
!= 如果两个操作数不相等(尝试先转换不同类型的操作数,再进行比较),则返回true。
> 如果左操作数大于右操作数,则返回true。
>= 如果左操作数大于或等于右操作数,则返回true。
< 如果左操作数小于右操作数,则返回true。
<= 如果左操作数小于或等于右操作数,则返回true。
算术运算符

一元运算符为-、+、–、++。

二元运算符列举如下:

运算符 说明
+ 加法
- 减法
* 乘法
/ 除法
% 除法后余数
位运算符
运算符 说明
a & b 按位与:如果两个操作数的对应位都为1,则将这个位设置为1,否则设置为0。
a | b 按位或:如果两个操作数的相应位中至少有一个为1,则将这个位设置为1,否则设置为0。
a ^ b 按位异或:如果两个操作数的对应位不同,则将这个位设置为1,否则设置为0。
~ a 按位非:反转操作数的位。
a << b 左移:将a的二进制表示向左移b位。
a >> b 算术右移:将a的二进制表示向右移b位,带符号扩展。
a >>> b 逻辑右移:将a的二进制表示向右移b位,左边补0。
逻辑运算符
运算符 说明
a && b 逻辑与
a || b 逻辑或
! a 逻辑非
If语句

if语句用于需要根据逻辑条件执行不同语句的场景。当逻辑条件为真时,执行对应的一组语句,否则执行另一组语句(如果有的话)。

else部分也可能包含if语句。

条件表达式可以是任何类型。但是对于boolean以外的类型,会进行隐式类型转换:

Switch语句

1.使用switch语句来执行与switch表达式值匹配的代码块。

2.如果switch表达式的值等于某个label的值,则执行相应的语句。

3.如果没有任何一个label值与表达式值相匹配,并且switch具有default子句,那么程序会执行default子句对应的代码块。

4.break语句(可选的)允许跳出switch语句并继续执行switch语句之后的语句。

如果没有break语句,则执行switch中的下一个label对应的代码块。

For语句

for语句会被重复执行,直到循环退出语句值为false。

for语句的执行流程如下:

1、 执行init表达式(如有)。此表达式通常初始化一个或多个循环计数器。

2、 计算condition。如果它为真值(转换后为true的值),则执行循环主体的语句。如果它为假值(转换后为false的值),则for循环终止。

3、 执行循环主体的语句。

4、 如果有update表达式,则执行该表达式。

5、 回到步骤2。

For-of语句

用for-of语句可遍历数组或字符串

for (forVar of expression) {

statements

}

While语句

行循环主体的语句。如果它为假值(转换后为false的值),则for循环终止。

3、 执行循环主体的语句。

4、 如果有update表达式,则执行该表达式。

5、 回到步骤2。

For-of语句

用for-of语句可遍历数组或字符串

for (forVar of expression) {

statements

}

While语句

只要condition为真值(转换后为true的值),while语句就会执行statements语句

Do-while语句

如果condition的值为真值(转换后为true的值),那么statements语句会重复执行。示例如下:
在这里插入图片描述

Break语句

使用break语句可以终止循环语句或switch。
如果break语句后带有标识符,则将控制流转移到该标识符所包含的语句块之外。

Continue语句

continue语句会停止当前循环迭代的执行,并将控制传递给下一个迭代。

Throw和Try语句

throw语句用于抛出异常或错误
在这里插入图片描述
try语句用于捕获和处理异常或错误:
在这里插入图片描述

支持finally语句
函数

函数声明
函数声明引入一个函数,包含其名称、参数列表、返回类型和函数体。
以下示例是一个简单的函数,包含两个string类型的参数,返回类型为string:
在这里插入图片描述
可选参数
可选参数的格式可为name?: Type
在这里插入图片描述
可选参数的另一种形式为设置的参数默认值。如果在函数调用中这个参数被省略了,则会使用此参数的默认值作为实参。
在这里插入图片描述
Rest参数
函数的最后一个参数可以是rest参数。使用rest参数时,允许函数或方法接受任意数量的实参。
在这里插入图片描述
返回类型
如果可以从函数体内推断出函数返回类型,则可在函数声明中省略标注返回类型
在这里插入图片描述
不需要返回值的函数的返回类型可以显式指定为void或省略标注。这类函数不需要返回语句。
在这里插入图片描述
函数的作用域
函数中定义的变量和其他实例仅可以在函数内部访问,不能从外部访问。
如果函数中定义的变量与外部作用域中已有实例同名,则函数内的局部变量定义将覆盖外部定义。
函数调用
调用函数以执行其函数体,实参值会赋值给函数的形参。
在这里插入图片描述
函数类型
函数类型通常用于定义回调:
在这里插入图片描述
箭头函数(又名Lambda函数)
函数可以定义为箭头函数,例如:
在这里插入图片描述
箭头函数的返回类型可以省略;省略时,返回类型通过函数体推断。
表达式可以指定为箭头函数,使表达更简短,因此以下两种表达方式是等价的:
在这里插入图片描述
闭包
闭包是由函数及声明该函数的环境组合而成的。该环境包含了这个闭包创建时作用域内的任何局部变量。
在下例中,f函数返回了一个闭包,它捕获了count变量,每次调用z,count的值会被保留并递增。
在这里插入图片描述

Logo

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

更多推荐