基础篇:ArkTS基础语法介绍

前言:

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

        ArkTS比typeScipt更严格,它的一大特性是它专注于低运行时开销。ArkTS对TypeScript的动态类型特性施加了更严格的限制,以减少运行时开销,提高执行效率。通过取消动态类型特性,ArkTS代码能更有效地被运行前编译和优化,从而实现更快的应用启动和更低的功耗。

基本知识

声明

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

变量声明

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

  1. let hi: string = 'hello';
  2. hi = 'hello, world';

常量声明

以关键字const开头的声明引入只读常量,该常量只能被赋值一次。

  1. const hello: string = 'hello';

对常量重新赋值会造成编译时错误。

自动类型推断

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

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

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

 
  1. let hi1: string = 'hello';
  2. let hi2 = 'hello, world';

类型

Number类型

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

数字字面量包括整数字面量和十进制浮点数字面量。

整数字面量包括以下类别:

  • 由数字序列组成的十进制整数。例如:0、117、-345
  • 以0x(或0X)开头的十六进制整数,可以包含数字(0-9)和字母a-f或A-F。例如:0x1123、0x00111、-0xF1A7
  • 以0o(或0O)开头的八进制整数,只能包含数字(0-7)。例如:0o777
  • 以0b(或0B)开头的二进制整数,只能包含数字0和1。例如:0b11、0b0011、-0b11

浮点字面量包括以下:

  • 十进制整数,可为有符号数(即,前缀为“+”或“-”);
  • 小数点(“.”)
  • 小数部分(由十进制数字字符串表示)
  • 以“e”或“E”开头的指数部分,后跟有符号(即,前缀为“+”或“-”)或无符号整数。

示例:

 
  1. let n1 = 3.14;
  2. let n2 = 3.141592;
  3. let n3 = .5;
  4. let n4 = 1e10;
  5. function factorial(n: number): number {
  6. if (n <= 1) {
  7. return 1;
  8. }
  9. return n * factorial(n - 1);
  10. }

Boolean类型

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

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

 
  1. let isDone: boolean = false;
  2. // ...
  3. if (isDone) {
  4. console.log ('Done!');
  5. }

String类型

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

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

 
  1. let s1 = 'Hello, world!\n';
  2. let s2 = 'this is a string';
  3. let a = 'Success';
  4. let s3 = `The result is ${a}`;

Void类型

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

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

 
  1. class Class<T> {
  2. //...
  3. }
  4. let instance: Class <void>

Object类型

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

Array类型

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

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

以下示例将创建包含三个元素的数组:

 
  1. let names: string[] = ['Alice', 'Bob', 'Carol'];

Enum类型

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

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

 
  1. enum ColorSet { Red, Green, Blue }
  2. let c: ColorSet = ColorSet.Red;

常量表达式可以用于显式设置枚举常量的值。

 
  1. enum ColorSet { White = 0xFF, Grey = 0x7F, Black = 0x00 }
  2. let c: ColorSet = ColorSet.Black;

Union类型

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

 
  1. class Cat {
  2. // ...
  3. }
  4. class Dog {
  5. // ...
  6. }
  7. class Frog {
  8. // ...
  9. }
  10. type Animal = Cat | Dog | Frog | number
  11. // Cat、Dog、Frog是一些类型(类或接口)
  12. let animal: Animal = new Cat();
  13. animal = new Frog();
  14. animal = 42;
  15. // 可以将类型为联合类型的变量赋值为任何组成类型的有效值

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

示例:

 
  1. class Cat { sleep () {}; meow () {} }
  2. class Dog { sleep () {}; bark () {} }
  3. class Frog { sleep () {}; leap () {} }
  4. type Animal = Cat | Dog | Frog | number
  5. let animal: Animal = new Frog();
  6. if (animal instanceof Frog) {
  7. let frog: Frog = animal as Frog; // animal在这里是Frog类型
  8. animal.leap();
  9. frog.leap();
  10. // 结果:青蛙跳了两次
  11. }
  12. animal.sleep (); // 任何动物都可以睡觉

Aliases类型

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

 
  1. type Matrix = number[][];
  2. type Handler = (s: string, no: number) => string;
  3. type Predicate <T> = (x: T) => Boolean;
  4. type NullableObject = Object | null;

运算符

赋值运算符

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

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

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

比较运算符

运算符 说明
== 如果两个操作数相等,则返回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 逻辑或
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言程序plus

你的鼓励将是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值