自学内容网 自学内容网

第四章:ArkTS 语句全解:从基础到高级的控制流与异常处理

在 ArkTS 编程中,语句是构建程序逻辑的关键元素,它们决定了程序的执行流程和行为。下面我们将详细探讨 ArkTS 中的各种语句。

一、If 语句

if 语句是编程中最常用的条件控制语句之一,用于根据逻辑条件决定执行哪些语句。

(一)基本用法

当逻辑条件为真时,执行对应的一组语句;否则,如果有 else 部分,则执行 else 中的语句。而且,else 部分还可以包含新的 if 语句,形成多层嵌套的条件判断。例如:

if (true) {
  // 语句 1,这里由于条件为真会执行此语句块
} else if (false) {
  // 语句 2,因为条件为假不会执行此语句块
} else {
  // 语句 3,只有当上面所有条件都不满足时才会执行此语句块
}

(二)类型转换

条件表达式可以是任何类型。对于非 boolean 类型的值,ArkTS 会进行隐式类型转换。例如:

let str = 'hi';
if (str) {
  console.log(str); // 这里字符串 'hi' 被转换为 true,因为非空字符串在条件判断中被视为真
}

let str1 = 'ts';
if (str1.length!= 0) {
  console.log(str1); // 也可以通过判断字符串长度是否为 0 来实现类似效果,非零长度字符串在条件判断中为真
}

二、Switch 语句

switch 语句用于根据表达式的值执行匹配的代码块。

(一)基本结构

switch (true) {
  case label1: 
    // 如果 label1 匹配,则执行
    //...
    // 语句 1
    //...
    break; // 可省略,但省略可能导致执行下一个 case 块,这在某些情况下可能是有意为之的逻辑
  case label2:
  case label3: 
    // 如果 label2 或 label3 匹配,则执行
    //...
    // 语句 23
    //...
    break; 
  default:
    // 默认语句,当没有任何 case 匹配时执行
}

(二)匹配与执行

如果 switch 表达式的值等于某个 label 的值,则执行相应的语句。如果没有任何一个 label 值与表达式值相匹配,并且 switch 具有 default 子句,那么程序会执行 default 子句对应的代码块。break 语句用于跳出 switch 语句,继续执行 switch 语句之后的语句。若没有 break 语句,则会顺序执行下一个 label 对应的代码块,这一特性可用于实现一些特殊的逻辑,比如多个 label 共享一段代码。

三、条件表达式

条件表达式由第一个表达式的布尔值来决定返回其它两个表达式中的哪一个。其形式为:true1? false1 : false2

如果 true1 的值为真值(转换后为 true 值),则整个表达式的结果为 false1;否则,结果为 false2。例如:

let num = Math.random() > 0.5? true : false;
let message = num? '1' : '2';
// 这里首先根据 Math.random() > 0.5 的结果给 num 赋值,然后再根据 num 的值给 message 赋值

四、For 语句

for 语句用于实现循环操作,会按照特定的流程重复执行代码块,直到循环退出条件为假。

(一)语法与执行流程

for ([init]; [condition]; [update]) {
  statements
}

其执行流程如下:

  1. 执行 init 表达式(如有)。此表达式通常用于初始化一个或多个循环计数器,例如定义循环变量并赋予初始值。
  2. 计算 condition。如果它为真值(转换后为 true 的值),则执行循环主体的语句。如果它为假值(转换后为 false 的值),则 for 循环终止。
  3. 执行循环主体的语句。
  4. 如果有 update 表达式,则执行该表达式,一般用于更新循环变量的值。
  5. 回到步骤 2,继续下一次循环判断。

例如:

let num2 = 0;
for (let i = 0; i < 10; i += 2) {
  num2 += i;
}
// 这里 i 从 0 开始,每次增加 2,只要 i < 10 就执行循环体,将 i 的值累加到 num2 中

五、For - of 语句

for - of 语句可用于遍历数组或字符串等可迭代对象。

for (forVar of expression) {
  statements
}

例如:

for (let ch of 'a string object') {
  // 这里可以对每个字符 ch 进行处理,比如输出、分析等操作
}

六、While 语句

while 语句只要条件为真值(转换后为 true 值),就会执行语句块。

while (condition) {
  statements
}

示例:

let n = 0;
let x = 0;
while (n < 3) {
  n++;
  x += n;
}
// 在这个示例中,只要 n < 3 成立,就会执行循环体,每次循环 n 自增 1,并将 n 的值累加到 x 上

七、Do - while 语句

do - while 语句与 while 语句类似,但它会先执行一次语句块,然后再检查条件。如果条件的值为真值(转换后为 true 值),那么语句块会重复执行。

do {
  statements
} while (condition)

示例:

let i = 0;
do {
  i += 1;
} while (i < 10)
// 这里首先会执行一次 i += 1,然后只要 i < 10 就会继续执行循环体

八、Break 语句

break 语句用于终止循环语句或 switch 语句的执行。

(一)基本用法

let x1 = 0;
while (true) {
  x1++;
  if (x1 > 5) {
    break;
  }
}
// 在这个无限循环中,当 x1 > 5 时,通过 break 语句跳出循环

(二)带标识符的用法

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

let x3 = 1;
label: while (true) {
  switch (x3) {
    case 1:
      // 内容
      break label; // 这里通过 break label 跳出整个 while 循环
  }
}

九、Continue 语句

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

例如:

let sum = 0;
for (let x = 0; x < 100; x++) {
  if (x % 2 == 0) {
    continue;
  }
  sum += x;
}
// 在这个 for 循环中,当 x 是偶数时,跳过本次循环体剩余部分,直接进入下一次循环,只有当 x 是奇数时才会执行 sum += x

十、Throw 和 Try 语句

(一)Throw 语句

throw 语句用于抛出异常或错误,以表示程序执行过程中出现了异常情况。例如:

throw new Error('this error');

(二)Try 语句

try 语句用于捕获和处理异常或错误。它与 catch 块配合使用,try 块中放置可能发生异常的语句,catch 块用于处理捕获到的异常。

例如:

class ZeroDivisor extends Error {}

function divide(a: number, b: number): number {
  if (b == 0) throw new ZeroDivisor();
  return a / b;
}

function process(a: number, b: number) {
  try {
    let res = divide(a, b);
    console.log('result: ' + res);
  } catch (x) {
    console.log('some error');
  }
}
// 在这个示例中,divide 函数可能会抛出 ZeroDivisor 异常,如果在 process 函数中调用 divide 时发生异常,会在 catch 块中进行处理

(三)Finally 语句

try 语句还支持 finally 子句。finally 块中的语句无论是否发生异常都会执行,常用于释放资源等操作。例如:

function processData(s: string) {
  let error: Error | null = null;

  try {
    console.log('Data processed: ' + s);
    //...可能发生异常的语句...
  } catch (e) {
    error = e as Error;
    //...异常处理...
  } finally {
    if (error!= null) {
      console.log(`Error caught: input='${s}', message='${error.message}'`);
    }
  }
}

通过对 ArkTS 中这些语句的详细学习,我们可以更好地控制程序的执行流程,处理各种情况,包括条件判断、循环操作、异常处理等,从而编写出更加强大和稳定的程序。希望这篇文章对大家理解 ArkTS 语句有所帮助。

在实际编程中,合理运用这些语句可以实现复杂的逻辑,提高代码的可读性和可维护性。同时,注意异常处理的设计,以确保程序在遇到错误时能够优雅地处理,避免崩溃或产生不可预期的结果。

ArkTS 语句总结

本文详细介绍了 ArkTS 中的多种语句,这些语句对于构建程序逻辑、控制执行流程和处理异常至关重要。

一、条件语句

  • if 语句:根据条件执行不同语句块,条件可为各种类型(非布尔类型会隐式转换),支持多层嵌套和 else if
  • switch 语句:基于表达式的值匹配执行相应代码块,可含 default 子句,break 语句用于跳出,若无 break 会顺序执行下一个代码块。

二、条件表达式

根据第一个表达式的布尔值在另外两个表达式中选择一个作为结果。

三、循环语句

  • for 语句:由初始化、条件判断、循环体和更新部分组成,按特定流程重复执行,常用于已知循环次数的情况。
  • for - of 语句:用于遍历可迭代对象,如数组和字符串,每次迭代获取一个元素进行处理。
  • while 语句:当条件为真时执行循环体,先判断条件再执行。
  • do - while 语句:先执行一次循环体,再根据条件决定是否继续,保证循环体至少执行一次。

四、控制语句

  • break 语句:用于终止循环或 switch 语句,可带标识符跳出指定代码块。
  • continue 语句:停止当前循环迭代,进入下一次迭代。

五、异常处理语句

  • throw 语句:抛出异常对象,表示程序出现异常情况。
  • try - catch 语句try 块包含可能出现异常的代码,catch 块捕获并处理异常。
  • finally 语句:与 try 配合,无论是否有异常,finally 块中的代码都会执行,常用于资源清理。

熟练掌握这些语句,能使开发者在 ArkTS 中灵活实现各种程序逻辑,有效处理复杂场景,确保程序的健壮性和稳定性。


原文地址:https://blog.csdn.net/zhiqiuqiu2/article/details/143771450

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!