メインコンテンツまでスキップ

繰り返し文

紹介

Wave言語では、同じコードを複数回実行する必要がある状況を処理するためにループを提供します。 ループは、特定の条件が満たされる間コードを繰り返し実行するか、定められた回数繰り返し実行する際に使用されます。

これにより、同じロジックを繰り返し記述する必要なく、簡潔で明確なコードで反復作業を表現することができます。 Waveは条件ベースのループと回数ベースのループの両方をサポートしており、ループ内で実行の流れを制御できるキーワードも提供します。

このセクションでは、while 文と for 文、そしてループの流れを制御する breakcontinue キーワードの使用方法を説明します。


while文

while 文は、指定された条件式が真(true)と評価される間、コードブロックを繰り返し実行します。 条件式が偽(false)になると、ループは即座に終了します。

この方法は、繰り返しの回数が明確でなく、特定の条件が満たされるまで繰り返す必要がある状況に適しています。

基本構造

Waveでのwhile文の基本構造は次の通りです。

while (条件式) {
// 繰り返しコード
}

条件式は必ず bool タイプで評価されなければならず、中括弧 {} で囲まれたコードブロック内には1つ以上の命令文を書くことができます。

例: 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 = ...)는 바깥 변수 자체를 갱신합니다.


ネストされた繰り返し文

ループは他のループの内部に記述することができ、これをネストされたループと呼びます。 ネストされたループは2次元データ構造を巡回したり、複数の条件の組み合わせを処理する際に有用です。

例: 二重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 を併用するとループ中でも実行フローを細かく制御することができ、より精巧で柔軟なループロジックを構成することができます。