基础语法

掌握 ArkTS 语言的声明、类型、运算符和语句是构建高效、稳定 HarmonyOS 应用的基础。这些基本概念不仅为编写清晰、可维护的代码提供了框架,还为你在开发过程中进行错误检查和性能优化奠定了基础,从而确保应用的可靠性和用户体验。

变量和常量

ArkTS 通过 let const声明变量和常量

let title: string = 'HarmonyOS'
title = '鸿蒙'	//变量可以修改

const author: string = 'huawei'
author = '华为'	//编译报错,常量不可以修改

类型推断

类型推断指的是ArkTS可以根据变量的赋值自动推断其数据类型,无需显式声明。

let title = 'HarmonyOS'	//没有声明数据类型,自动推断为string类型

数据类型

数据类型就是给数据分个类,在编程中不同类型的数据采用不同的关键字进行标识,比如字符串用string,整数用number。数据类型按照复杂程度可分为基本数据类型和引用数据类型。

  • 基本数据类型包括number、string等简单类型,它们可以准确地表示单一的数据类型。基本类型确保数据在存储和访问时是直接的,比较时直接比较其值。

  • 引用类型包括对象、数组和函数等复杂数据结构。这些类型通过引用访问数据,对象和数组可以包含多个值或键值对,函数则可以封装可执行的代码逻辑。

[!warning]

引用类型在内存中通过指针访问数据,修改引用会影响原始数据。

基本数据类型

基本数据类型包括:number string boolean 等简单类型,可以准确表达单一的数据,确保数据存、取、比较时都是直接的。

let a: number = 3
let b: boolean = true
let c: string = 'HarmonyOS'
console.log("a的值:"+a) 
console.log("b的值:"+b) 
console.log("c的值:"+c) 

引用数据类型

引用类型包括对象、数组和函数等复杂数据结构。这些类型通过引用访问数据,对象和数组可以包含多个值或键值对,函数则可以封装可执行的代码逻辑。

[!warning]

函数也是一种数据类型,关于函数的用法后面单独讲解。

数组类型

数组是一个存储多个数据的容器,容器中的数据可以是基本数据类型也可以是引用数据类型。

数组的相关概念:

  • 元素:数组容器中存储的数据。
  • 索引:每一个元素都对英一个编号,从0开始依次递增。
  • 长度:数组中元素的个数,可以通过 数组名.length获取。

演示代码如下

//索引			    0    1    2
let arr:string[] = ['aa','bb','cc']
//修改arr数组的0索引元素
arr[0] = 'AA'

//打印数组中的每一个元素
console.log(arr[0])		//输出 aa
console.log(arr[1])		//输出 bb
console.log(arr[2])		//输出 cc

//打印数组中最后一个元素
console.log(arr[arr.length-1])	//cc
对象类型

对象就像是一个收纳盒📦,里面可以装各种不同类型的数据(属性),还给每个数据取了名字(属性名),方便随时取用。

  • 例如,可以把一个用户看作一个对象,这个用户对象拥有姓名、年龄、是否VIP属性。 代码如下:
// 1. 定义用户类
class User {
  // 属性(可添加类型注解)
  name: string = ''
  age: number = 20
  isVIP: boolean = true
}

// 2. 创建对象
const user: User = new User();

// 3. 打印属性(两种方式)
console.log(user.name);    // "张三"
console.log(`${user.age}`);     // 25
console.log(`${user.isVIP}`);   // false

联合类型

联合类型本质上是类型层面的逻辑组合。用于约束变量可接受多种类型,仅在编译时存在,运行时被擦除。

let id: string | number 
id = '1'
id = 2
id = true //报错

类型别名

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

//定义联合类型定义别名
type idType =  string | number

//使用类型别名
let id: idType
id = '1'
id = true //报错

枚举类型

枚举是一种预先定义好的命名常量集合,每个常量都有对应的值(可以是数字或字符串),让代码更易读且避免硬编码。

//定义枚举类
enum Direction{
  LEFT ,RIGHT,UP,DOWN
}

console.log(`${Direction.LEFT}`)  //输出 0
console.log(`${Direction.RIGHT}`) //输出 1

命名规范

不管定义变量还是定义常量,取名也是不是乱取的,是有一些命名规则的,必须遵守这些规则,否则代码编译不通过。

  1. 只能包含数字、字母、下划线、$,不能以数字开头
  2. 不能使用内置关键字或者保留字
  3. 严格区分大小写

运算符

运算符(Operator)是一种告诉编译器执行特定数学或逻辑操作的符号。

算术运算符

算数运算符包含:+ - * / % ++ --,其中+ - *(乘) /(除)就是字面上意思,小学数学都学过,不做过多阐述。

下面重点讲解一下++或者--运算符的运算规则,分为单独使用和混合使用两种情况

  • 单独使用:不断++或者–放在操作数的前面还是后面,都表示对操作数自增1或者自减1
let a = 3
let b = 4
a++
console.log(`a的值为${a}`) // 4
++b;
console.log(`b的值为${b}`) // 5
  • 混合使用:++和–可以放在变量前面或者后面,运算顺序有所不同
let x = 3
let y = ++x	//x先+1,再把x的结果赋值给y
console.log(`x的值为${x}`) //x的值为4
console.log(`y的值为${y}`) //y的值为4
let i = 3
let j = i++	//先把i的值赋值给j,i再+1
console.log(`i的值为${i}`) //x的值为4
console.log(`j的值为${j}`) //y的值为3

赋值运算符

赋值运算就是把具体数据值赋值给变量,有下面的几个运算符

let a1 = 10	//把整数10赋值给var类型的变量a
let b1 = 20
b1+=10		//把b1+10之后,把结果再赋值给b,最终b=30
console.log(`b1的值为${b1}`) //b1的值为30


let c1 = 10
c1 %= 4			//把c对4取余数,把结果再赋值给c,最终c=2
console.log(`c1的值为${c1}`) //c1的值为2

比较运算符

用来对两个数据做比较运算,最终结果只能是true或者false。需要注意的是==和=千万不要搞混淆了

  • = 用于赋值
  • == 用于判断两个数据是否相等
let a2 = 10
let b2 = 10
let c2 = a2==b2
console.log(`c2的值为${c2}`) //c2的值为true

逻辑运算符

逻辑运算可以对多个条件进行连接,最终结果也是true或者false

let a3 = 3;
let b3 = 4;
let c3 = 5;
//&&(双与): 左右两边都是true,结果才是true。
console.log('逻辑运算',a3 > b3 && b3 < c3)	//false
console.log('逻辑运算',a3 < b3 && b3 < c3)	//true

//||(双或): 左右两边有一个是true,结果就是true。
console.log('逻辑运算',a3 > b3 || b3 > c3)	//false
console.log('逻辑运算',a3 < b3 || b3 < c3)	//true

//!(非): 对值取反
console.log('逻辑运算',!(a3 < b3))	//false

三元运算符

三元运算符是ArkTS 中一种简洁的条件表达式,格式为:条件 ? 表达式1 : 表达式2。以下是详细解析和示例:

// 基本语法
let result = 条件 ?1 :2;

// 示例:判断成年
let age = 20;
let message = age >= 18 ? "成年人" : "未成年人";
console.log(message); // "成年人"

流程控制语句

if

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

if语句如下所示:

if (condition1) {
  // 语句1
} else if (condition2) {
  // 语句2
} else {
  // else语句
}

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

let s1:string = "Hello"
if (s1) {
  console.log(s1); // 打印“Hello”
}


let s2 = 'World';
if (s2.length != 0) {
  console.log(s2); // 打印“World”
}

switch

switch用于在几个固定的值当中,选择一个匹配的值,执行对应的代码块。

switch (expression) {
  case label1: // 如果label1匹配,则执行
    // ...
    // 语句1
    break; // 可省略
  case label2:
    //语句2
    break;
  case label3: // 如果label2或label3匹配,则执行
    // ...
    // 语句3
    break; // 可省略
  default:
    // 默认语句
}

执行流程:

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

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

  3. break语句(可选的),用于跳出switch语句并继续执行switch语句之后的语句。

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

示例代码:

let score = 99

//匹配成绩等级
switch (true) { // 特殊用法:比较表达式
    case score >= 90:
      console.log("当前等级为:"+'A')
    case score >= 80:
      console.log("当前等级为:"+'B')
    case score >= 60:
      console.log("当前等级为:"+'C')
    default:
      console.log("当前等级为:"+'D')
}

for

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

for (初始化语句; 条件判断; 变量更新) {
  循环体语句
}

示例:打印输出1~10之间所有的整数

for(let i=1; i<=10; i++){
  console.log(`${i}`)
}

示例:求0~10范围内所有偶数的和

let sum = 0;
for (let i = 0; i <= 10; i+=2) {
   sum+=i
}
console.log(`${sum}`)

for of

使用for-of语句可遍历数组或字符串。示例如下:

for (forVar of expression) {
  statements
}

示例:

let array = ['你好', '鸿蒙', 'HarmonyOS'];
for (let s of array) {
    console.log(s); 	//'你好', '鸿蒙', 'HarmonyOS'
}

while

只要condition为真值(转换后为true的值),while语句就会执行statements语句。示例如下:

while (condition) {
  statements
}

示例:

let n = 0;
let x = 0;
while (n < 3) {
  x += n;
  n++;
}
console.log(`${n}`)

do while

如果condition的值为真值(转换后为true的值),那么statements语句会重复执行。示例如下:

do {
  statements
} while (condition)

示例:

let sum3 = 0
let i = 0;
do {
  sum3 += i
  i++
} while (i <= 10)

console.log(`${sum3}`) //55

break

使用break语句可以终止循环语句或switch。

示例:

for (let x = 1; x <=10; x++) {
  if (x % 2 == 0) {
    break
  }
  console.log(`${x}`)	//1
}

如果break语句后带有标识符,则将控制流转移到该标识符所包含的语句块之外。

示例:

let x = 1
label: while (true) {
  switch (x) {
    case 1:
      // statements
      break label; // 中断while语句
  }
}

continue

continue语句会停止当前循环迭代的执行,并继续执行下一次循环。

示例:

for (let x = 1; x <=10; x++) {
  if (x % 2 == 0) {
    continue
  }
  console.log(`${x}`)	//1 3 5 7 9
}
Logo

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

更多推荐