4  第3章:控制流

5 第3章:控制流

5.1 🎯 学习目标

  • 掌握条件语句(if/else、switch)的使用
  • 理解各种循环语句(for、while、do-while)的区别
  • 熟练使用break和continue控制循环
  • 掌握for…of和for…in遍历数组与对象

5.2 3.1 条件语句

5.2.1 🔀 if 语句

if 语句用于根据条件执行不同的代码块。

let score: number = 85

// 基本 if 语句
if (score >= 60) {
  console.log('恭喜你,及格了!')
}

// if...else 语句
if (score >= 60) {
  console.log('及格')
} else {
  console.log('不及格')
}

// if...else if...else 语句
if (score >= 90) {
  console.log('优秀')
} else if (score >= 80) {
  console.log('良好')
} else if (score >= 60) {
  console.log('及格')
} else {
  console.log('不及格')
}

最佳实践:

在ArkTS/TypeScript中,条件表达式的返回值会被自动转换为布尔值: - false0''nullundefinedNaN 转为 false - 其他值转为 true

5.2.2 🎚️ 三元运算符(简化条件)

let age: number = 20
let status: string = age >= 18 ? '成年' : '未成年'

// 等价于:
let status2: string
if (age >= 18) {
  status2 = '成年'
} else {
  status2 = '未成年'
}

5.2.3 🔀 switch 语句

当有多个条件分支时,switch 语句比 if...else if 更清晰:

let day: number = 3
let dayName: string

switch (day) {
  case 1:
    dayName = '星期一'
    break
  case 2:
    dayName = '星期二'
    break
  case 3:
    dayName = '星期三'
    break
  case 4:
    dayName = '星期四'
    break
  case 5:
    dayName = '星期五'
    break
  default:
    dayName = '周末'
}

console.log(dayName)  // 输出:星期三

注意:

switch 语句中的 break 非常重要!如果没有 break,程序会继续执行下一个 case(称为”穿透”),这通常不是我们想要的结果。

🎮 互动演示:成绩等级判定

输入一个分数(0-100),系统会自动判定等级:

📊 等级标准:
90-100 优秀 80-89 良好 70-79 中等 60-69 及格 <60 不及格

5.3 3.2 循环语句

循环语句用于重复执行一段代码。

5.3.1 🔄 for 循环

for 循环是最常用的循环语句,适合已知循环次数的场景。

// 基本 for 循环
for (let i = 0; i < 5; i++) {
  console.log('当前 i = ' + i)
}

// 计算 1 到 100 的和
let sum: number = 0
for (let i = 1; i <= 100; i++) {
  sum += i
}
console.log('1到100的和:' + sum)  // 5050

// 倒序循环
for (let i = 10; i >= 1; i--) {
  console.log(i)  // 10, 9, 8, ..., 1
}

5.3.2 🔁 while 循环

while 循环适合未知循环次数,只知道循环条件的场景。

// 基本 while 循环
let i: number = 1
while (i <= 5) {
  console.log('i = ' + i)
  i++
}

// 猜数字游戏(模拟)
let target: number = 42
let guess: number = 30
while (guess !== target) {
  if (guess < target) {
    console.log('猜小了!')
    guess += 5
  } else {
    console.log('猜大了!')
    guess -= 5
  }
}
console.log('猜对了!答案是 ' + target)

5.3.3 🔁 do…while 循环

do...while 循环至少执行一次,然后再判断条件。

let i: number = 1

do {
  console.log('i = ' + i)
  i++
} while (i <= 5)

// 即使条件一开始就不满足,do...while 也会执行一次
let j: number = 10
do {
  console.log('这条消息会显示,因为 do...while 至少执行一次')
  j++
} while (j < 5)

5.3.4 📊 三种循环对比

循环类型 适用场景 特点
for 已知循环次数 结构清晰,初始化、条件、迭代在一起
while 未知循环次数 先判断条件,再执行循环体
do...while 至少执行一次 先执行一次,再判断条件

5.4 3.3 循环控制:break 与 continue

5.4.1 🛑 break 语句

break 用于立即退出整个循环。

// 找到第一个能被 7 整除的数
for (let i = 1; i <= 100; i++) {
  if (i % 7 === 0) {
    console.log('找到第一个能被7整除的数:' + i)
    break  // 找到后就退出循环
  }
}
// 输出:找到第一个能被7整除的数:7

5.4.2 ⏭️ continue 语句

continue 用于跳过当前迭代,继续下一次循环。

// 打印 1 到 10 中的奇数
for (let i = 1; i <= 10; i++) {
  if (i % 2 === 0) {
    continue  // 如果是偶数,跳过本次循环
  }
  console.log(i)  // 只打印奇数:1, 3, 5, 7, 9
}

🎮 互动演示:break 与 continue 的区别

break 演示

遇到能被3整除的数就停止:

continue 演示

跳过能被3整除的数:

5.5 3.4 遍历数组与对象

5.5.1 🔍 for…of 循环(遍历值)

for...of 用于遍历可迭代对象(如数组、字符串、Map、Set等)的

let fruits: string[] = ['苹果', '香蕉', '橙子']

// for...of 遍历数组的值
for (let fruit of fruits) {
  console.log(fruit)
}
// 输出:苹果、香蕉、橙子

// 遍历字符串
let message: string = 'Hello'
for (let char of message) {
  console.log(char)
}
// 输出:H、e、l、l、o

5.5.2 🔍 for…in 循环(遍历键/索引)

for...in 用于遍历对象的或数组的索引

let fruits: string[] = ['苹果', '香蕉', '橙子']

// for...in 遍历数组的索引
for (let index in fruits) {
  console.log(`fruits[${index}] = ${fruits[index]}`)
}
// 输出:fruits[0] = 苹果、fruits[1] = 香蕉、fruits[2] = 橙子

// 遍历对象的键
let person = { name: '张三', age: 25, city: '北京' }
for (let key in person) {
  console.log(`${key}: ${person[key]}`)
}

for…of vs for…in

  • 使用 for...of 当你需要
  • 使用 for...in 当你需要键/索引
  • 遍历数组时,优先使用 for...of

5.5.3 🗺️ forEach 方法

数组的 forEach 方法提供了一种更函数式的遍历方式:

let numbers: number[] = [1, 2, 3, 4, 5]

numbers.forEach((value, index) => {
  console.log(`索引 ${index}: 值 ${value}`)
})

// 计算所有元素的和
let sum: number = 0
numbers.forEach(value => {
  sum += value
})
console.log('总和:' + sum)  // 15

🎮 互动练习:数组遍历方式对比

选择遍历方式,查看不同遍历方法的效果:

5.6 📝 本章小结

本章我们学习了ArkTS中的控制流语句:

  1. 条件语句if/else 用于基本条件判断,switch 用于多条件分支
  2. 循环语句for(已知次数)、while(未知次数)、do...while(至少一次)
  3. 循环控制break(退出整个循环)、continue(跳过本次迭代)
  4. 遍历方式for...of(遍历值)、for...in(遍历键/索引)、forEach(函数式遍历)

5.7 ✏️ 练习

  1. 编写一个程序,判断一个年份是否是闰年(能被4整除但不能被100整除,或能被400整除)
  2. 使用 for 循环计算 1 到 100 之间所有偶数的和
  3. 创建一个包含5个姓名的数组,使用 for...of 遍历并打印每个姓名
  4. 使用 while 循环实现”猜数字”游戏:程序随机生成一个1-100的数字,用户猜,直到猜对为止

5.8 📚 参考资料