ArkTS 语言基础 第五节:流程控制

炼气五重天

第五节:流程控制

【教学目标】
  1. 掌握 if-else 条件判断的语法及多分支场景应用
  2. 理解 switch-case 语句的适用场景及与 if-else 的区别
  3. 熟练使用 forwhile 等循环结构处理重复操作
  4. 能通过 breakcontinue 控制循环流程,解决实际问题
【本节重点】
  • 条件判断:if-else 的嵌套使用与 switch-case 的穿透问题
  • 循环结构:for 循环的计数器控制、for...of 的数组遍历
  • 循环控制:break(终止循环)与 continue(跳过当前轮次)的区别
  • 场景选择:不同流程控制语句的适用场景对比

一、条件判断:让程序"做选择"

条件判断语句能让程序根据不同情况执行不同代码,就像生活中"如果下雨就带伞,否则不带"的决策过程。

1.1 单分支:if 语句

当满足条件时执行代码,不满足则跳过:

typescript 复制代码
let score = 85;
// 条件为true时执行大括号内的代码
if (score >= 60) {
  console.log("考试及格"); // 会执行(85 >= 60为true)
}
1.2 双分支:if-else 语句

满足条件执行一段代码,不满足执行另一段代码:

typescript 复制代码
let age = 17;
if (age >= 18) {
  console.log("已成年,可独立购票");
} else {
  console.log("未成年,需成人陪同"); // 会执行(17 < 18)
}
1.3 多分支:if-else if-else 语句

处理多个条件判断,从上到下依次检查,满足第一个条件后不再执行后续判断:

typescript 复制代码
let grade = 88;
if (grade >= 90) {
  console.log("优秀");
} else if (grade >= 80) {
  console.log("良好"); // 会执行(88 >= 80且不满足上一个条件)
} else if (grade >= 60) {
  console.log("及格");
} else {
  console.log("不及格"); // 所有条件都不满足时执行
}

注意 :条件判断有顺序性,范围大的条件放后面,否则会被前面的条件拦截:

typescript 复制代码
// 错误示例:条件顺序错误
let score = 85;
if (score >= 60) {
  console.log("及格"); // 会先执行这里,后面的条件不再检查
} else if (score >= 80) {
  console.log("良好"); // 永远不会执行
}
1.4 嵌套条件:if 内部再放 if

处理更复杂的多层判断,例如"先判断是否及格,再判断是否优秀":

typescript 复制代码
let score = 95;
if (score >= 60) {
  console.log("及格");
  // 嵌套判断:及格的前提下是否优秀
  if (score >= 90) {
    console.log("且达到优秀水平"); // 会执行
  }
} else {
  console.log("不及格");
}

二、switch-case 语句:固定值匹配

当判断条件是固定值 (如枚举、状态码)时,switch-caseif-else 更简洁。

2.1 基本语法
typescript 复制代码
let day = 3;
switch (day) {
  case 1: // 当day等于1时
    console.log("星期一");
    break; // 跳出switch,防止穿透
  case 2:
    console.log("星期二");
    break;
  case 3:
    console.log("星期三"); // 会执行
    break;
  default: // 所有case都不匹配时执行(类似else)
    console.log("未知星期");
}
2.2 关键注意点:break 防止穿透

如果忘记写 break,会从匹配的 case 开始,继续执行后续所有 case 代码(称为"穿透"):

typescript 复制代码
let num = 2;
switch (num) {
  case 1:
    console.log("一");
  case 2:
    console.log("二"); // 执行
  case 3:
    console.log("三"); // 会继续执行(因为case 2没写break)
  default:
    console.log("结束"); // 继续执行
}
// 输出结果:二  →  三  →  结束

适用场景switch-case 适合判断离散的固定值 (如星期、月份、状态码),而 if-else 适合范围判断(如分数区间、年龄范围)。

三、循环结构:让程序"重复做"

循环语句用于重复执行一段代码,避免重复编写相同逻辑(如计算1到100的和)。

3.1 for 循环:固定次数的循环

适合已知循环次数的场景,语法:for (初始化; 条件; 更新)

typescript 复制代码
// 计算1到10的和
let sum = 0;
for (let i = 1; i <= 10; i++) { // i从1开始,每次加1,直到i>10停止
  sum = sum + i; // 累加i的值
}
console.log(sum); // 55(1+2+...+10的结果)

三部分作用

  • 初始化:let i = 1 → 循环前执行一次(初始化计数器)
  • 条件:i <= 10 → 每次循环前检查,true则继续,false则停止
  • 更新:i++ → 每次循环后执行(更新计数器)
3.2 for...of 循环:遍历数组元素

简化数组遍历,直接获取每个元素的值(无需通过索引访问):

typescript 复制代码
let fruits = ["苹果", "香蕉", "橙子"];
// 遍历数组,依次取出每个元素赋值给fruit
for (let fruit of fruits) {
  console.log(fruit); // 依次输出:苹果、香蕉、橙子
}
3.3 while 循环:条件满足就循环

适合循环次数不确定,只知道终止条件的场景:

typescript 复制代码
// 计算1开始累加,直到和大于100
let total = 0;
let num = 1;
while (total <= 100) { // 只要total<=100就继续循环
  total += num;
  num++;
}
console.log(total); // 105(1+2+...+14=105)
3.4 do-while 循环:至少执行一次

while 的区别:先执行一次循环体,再检查条件(保证至少执行一次):

typescript 复制代码
let input;
do {
  input = prompt("请输入密码(至少6位)"); // 弹出输入框
} while (input.length < 6); // 输入长度不足6位则重新输入
console.log("密码设置成功");

四、循环控制:breakcontinue

在循环中控制流程,避免不必要的循环执行。

4.1 break:立即终止循环

当满足条件时,直接跳出整个循环(后续循环不再执行):

typescript 复制代码
// 查找数组中第一个偶数
let numbers = [3, 5, 4, 7, 8];
for (let num of numbers) {
  if (num % 2 === 0) {
    console.log("找到偶数:", num); // 输出4
    break; // 找到后立即终止循环
  }
}
// 后续的7、8不会被检查
4.2 continue:跳过当前轮次

跳过当前循环中剩余的代码,直接进入下一轮循环:

typescript 复制代码
// 计算1到10中所有奇数的和
let sumOdd = 0;
for (let i = 1; i <= 10; i++) {
  if (i % 2 === 0) {
    continue; // 是偶数则跳过当前轮次
  }
  sumOdd += i; // 只累加奇数
}
console.log(sumOdd); // 25(1+3+5+7+9)

【课堂小结】

  1. 条件判断:
    • if-else 适合范围判断,多分支用 if-else if-else
    • switch-case 适合固定值匹配,需用 break 防止穿透
  2. 循环结构:
    • for 适合已知次数的循环(计数器控制)
    • for...of 简化数组遍历(直接获取元素)
    • while/do-while 适合条件驱动的循环(次数不确定)
  3. 循环控制:
    • break 终止整个循环,continue 跳过当前轮次

【课后练习】

  1. 操作题:用 if-else 判断一个年份是否为闰年(能被4整除且不能被100整除,或能被400整除)
  2. 操作题:用 for 循环计算1到100中所有能被3整除的数字之和
  3. 操作题:用 switch-case 实现"输入月份,输出季节"(3-5月春季,6-8月夏季等)
  4. 思考题:如何用 while 循环实现"打印1到100中所有偶数,遇到50时停止"?

【下节预告】

第六节将学习函数的定义与使用,包括函数的参数、返回值、箭头函数等特性,掌握如何通过函数封装代码,提高复用性和可读性。

相关推荐
星释6 小时前
鸿蒙Flutter三方库适配指南-04.使用MacOS搭建开发环境
flutter·macos·harmonyos
ifeng09186 小时前
HarmonyOS分布式媒体播放器——跨设备音视频无缝流转
分布式·音视频·harmonyos
爱笑的眼睛117 小时前
HarmonyOS视频编解码与转码深度探索:从原理到分布式实践
华为·harmonyos
HMS Core10 小时前
【FAQ】HarmonyOS SDK 闭源开放能力 — AppGallery Kit
华为·harmonyos
王嘉俊92517 小时前
HarmonyOS 微服务与 OpenHarmony 开发:构建模块化与开源生态应用
微服务·开源·harmonyos·arkts·开发·鸿蒙
半夜偷删你代码17 小时前
鸿蒙中传感器判断移动
华为·harmonyos
星释17 小时前
鸿蒙Flutter三方库适配指南-02.Flutter相关知识基础
flutter·华为·harmonyos
爱笑的眼睛1117 小时前
HarmonyOS Canvas画布组件:高级图形绘制技术解析
华为·harmonyos
2501_9197490318 小时前
鸿蒙:将Resource类型的image转成 image.PixelMap 类型
华为·harmonyos·鸿蒙