跳到主要内容

循环语句

介绍

Wave语言提供循环语句以处理需要多次执行相同代码的情况。 循环语句用于在满足特定条件时继续执行代码,或重复执行一定次数。

这使得可以不必重复编写相同的逻辑,而是通过简洁明确的代码来表达重复的工作。 Wave支持基于条件的循环和基于次数的循环,并提供关键字来控制循环中的执行流程。

本节将解释whilefor语句,以及用于控制循环流程的breakcontinue关键字的使用方法。


while 语句

while语句在给定条件表达式被评估为真(true)时重复执行代码块。 当条件表达式变为假(false)时,循环立即终止。

此方法适用于重复次数不明确,并需满足特定条件的情况。

基本结构

在Wave中while语句的基本结构如下。

while (条件表达式) {
// 要重复执行的代码
}

条件表达式必须评估为bool类型,可以在用花括号{}括起来的代码块中编写一个或多个语句。

示例:输出从0到4

var i :i32 = 0;

while (i < 5) {
println("i是{}。", i);
i = i + 1;
}

在此示例中,变量 i 小于 5 时执行循环。 在每次迭代中输出当前值,将 i 的值增加 1,使条件最终变为假。


for 语句

for 语句适用于重复次数较为明确的情况。 通过一次性定义初始值、条件表达式和增量表达式,可以清晰地表达循环的流程。

因为将循环控制所需的元素集中在一起,所以容易一目了然地了解循环结构。

基本结构

for (초기화; 조건식; 증감식) {
// 반복할 코드
}

Wave의 for 초기화는 여러 형태를 지원합니다.

  • 암시적 var 타입 초기화
  • var / let mut / const 선언 초기화
  • 일반 식 초기화 (기존 변수 재사용)

예제 1: 암시적 타입 초기화

for (i :i32 = 1; i <= 5; i += 1) {
println("i = {}", i);
}

예제 2: var / let mut 초기화

for (var i: i32 = 0; i < 3; i += 1) {
println("var i = {}", i);
}

for (let mut j: i32 = 0; j < 3; j += 1) {
println("let mut j = {}", j);
}

예제 3: 식 기반 초기화 (기존 변수 재사용)

var i: i32 = 99;

for (i = 3; i <= 5; i += 1) {
println("i = {}", i);
}

println("after loop: {}", i); // 6

선언형 초기화(var, let mut, i :i32 = ...)는 루프 스코프 변수로 동작하고,
식 기반 초기화(i = ...)는 바깥 변수 자체를 갱신합니다.


嵌套循环

循环语句可以写在另一个循环语句内,这称为嵌套循环。 嵌套循环对于遍历二维数据结构或处理多个条件组合非常有用。

示例: 二重while语句

var i :i32 = 0;

while (i < 3) {
var j :i32 = 0;

while (j < 2) {
println("i={}, j={}", i, j);
j = j + 1;
}

i = i + 1;
}

在这个例子中,每当外部 while 循环运行一次,内部 while 循环将全部执行。 通过这种方式,可以顺序处理 (i, j) 形式的组合。


break 语句

break 语句立即终止循环,并将流转移到该循环之外。 在不再需要继续循环时使用。

示例: 特定值时终止循环

var i :i32 = 0;

while (true) {
if (i == 5) {
break;
}

println(i);
i = i + 1;
}

在这个例子中,当 i 等于 5 时,break 被执行,结束无限循环。 这样,break 语句在想要独立于循环条件控制循环时很有用。


continue 语句

continue 语句跳过当前循环的剩余代码,直接开始下次循环。 在某些条件下只需省略部分逻辑时使用。

示例: 仅输出偶数

for (var i: i32 = 0; i <= 10; i = i + 1) {
if (i % 2 == 1) {
continue;
}

println(i);
}

在这段代码中,如果 i 是奇数则执行 continue,跳过输出部分。 结果只输出偶数值。


总结

Wave 的循环设计为能够自然表达基于条件和基于次数的重复。 while 语句适合条件为中心的循环,而 for 语句用于循环次数和流程明确的情况。

结合使用 breakcontinue 可以在循环过程中精细控制执行流,从而构建更复杂和灵活的循环逻辑。