Zig 入門 #3 - while

2022-04-14  /  ZigProgramming

ziglearn.org を参考に Zig の基本を一通りさらってみます。まずは Chapter 1 - Basics | ziglearn.org から。今回はwhile について。

while

参考: while

構文は以下のようになります。

while (condition) : (continueExp) {
    // ...
}

continue expression が独特な感じがしますね。繰り返し処理が続く時にブロックのコードの前に実行される処理になります。condition が満たされずループがそもそも実行されない場合には continue expression も実行されません。

他の言語で while ループの最後の行に記述するような処理を continue expression として特別な箇所に記述するのでわかりやすくて良いですね。

今回確認したコードは以下の通りです。

    var i: u8 = 2;

    // 100を超えるまで2倍になっていくので、i = 64 の時には実行される
    while (i < 100) {
        // 最後は 64 * 2 なので 128 となる
        i *= 2;
    }
    std.log.info("i: {}", .{i}); // i: 128

    var sum: u8 = 0;
    var j: u8 = 1;

    // continue expression はブロックを抜ける際に実行される
    while (j <= 10) : (j += 1) {
        // 1, 2 (1 + 1), 3 (2 + 1), ..., 10 まで表示される
        std.log.info("j: {}", .{j});
        sum += j;
    }
    std.log.info("sum: {}", .{sum}); // 55

    while (j < 1) : (sum += 100) {
        // do nothing
    }
    // 今回の continue expression は実行されないので 55 のまま
    std.log.info("sum: {}", .{sum}); // 55

    var k: u8 = 0;
    while (k <= 3) : (k += 1) {
        if (k == 1) continue;
        if (k == 3) break;
        std.log.info("k: {}", .{k}); // 0, 2
    }