制御フロー

括弧付き条件式とループ、C 形式の for ループ、match、break、continue を説明します。

Wave Foundation

条件分岐

ifelse if の条件は、必ず括弧で囲みます

if (score >= 90) {
    println("A");
} else if (score >= 80) {
    println("B");
} else {
    println("C");
}

if (score >= 90) { ... } のように記述します。括弧のない形式は無効です。

条件式では状態を変更できない

ifelse ifwhilefor の条件内では、代入、複合代入、++-- は使用できません。比較には == を使うか、状態の変更を条件式より前の文へ移動してください。

value = read_value();
if (value == expected) {
    println("matched");
}

通常の代入文と for ループの更新部分では、引き続き代入を使用できます。

while ループ

while の条件も括弧で囲みます。

var index: i32 = 0;
while (index < 10) {
    index += 1;
}

for ループ

for は初期化、条件、更新式を使います。

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

初期化部分では var によるローカル変数宣言、または式の評価ができます。conststatic はトップレベル宣言であり、for ループの初期化には使用できません。

break と continue

var i: i32 = 0;
while (i < 20) {
    i += 1;
    if (i == 5) {
        continue;
    }
    if (i == 10) {
        break;
    }
}

break は最も内側のループを終了し、continue は次の反復へ進みます。

match

match の対象値は括弧で囲みます。パターンには整数リテラル、列挙型のバリアント名、_ ワイルドカードを使用できます。

match (status) {
    200 => { println("ok"); }
    404 => { println("not found"); }
    _ => { println("other"); }
}

ひとつの match に重複した _ ワイルドカードアームを含めることはできません。各アームの本体は { ... } ブロックです。