Zig 入門 #3 - while
2022-04-14 / Zig, Programming
ziglearn.org を参考に Zig
の基本を一通りさらってみます。まずは Chapter 1 - Basics | ziglearn.org から。今回はwhile
について。
while
参考: while
構文は以下のようになります。
while (condition) : (continueExp) {
// ...
}
- 条件が
true
の間ブロック内繰り返す continue
でブロック内の以降の処理を中止し、次の繰り返しを実行するbreak
でブロック内の以降の処理を中止し繰り返し処理も終了する: (continueExp)
の部分をcontinue expression
(日本語だと continue 式?)と言うcontinue expression
はループが繰り返される場合に、ブロックのコードの前に実行される
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
}