콘텐츠로 이동

制御フロー

이 콘텐츠는 아직 번역되지 않았습니다.

条件によって処理を分けたり、処理を繰り返したり、途中で抜けたりする仕組みを制御フローと呼びます。

if は条件によって評価する処理を選びます。

if condition {
a
} else {
b
}

条件は bool 型でなければなりません。

条件が true の場合は最初のブロックだけが評価され、false の場合は else 側だけが評価されます。選ばれなかった側の処理は実行されません。

else if も使用できます。

if x < 0 {
-1
} else if x == 0 {
0
} else {
1
}

if の結果を値として使う場合は、分岐から得られる値の型が一致している必要があります。一致しない場合はコンパイルエラーになります。

while は、条件が true の間だけ処理を繰り返します。

while count < 10 {
count += 1;
}

各回の開始前に条件を評価します。最初から条件が false なら、ブロックは一度も実行されません。

条件は bool 型でなければなりません。

loop は、break や return などで抜けるまで繰り返します。

loop {
if done {
break;
}
}

loop は break に値を渡すことで、ループ全体の結果を返せます。

let value = loop {
break 42;
};

同じ loop から値付きの break を使う場合、その値の型は互いに一致している必要があります。

入れ子になったループのどれを対象にするか指定したい場合は、'name: 形式のラベルを付けます。

'outer: loop {
loop {
break 'outer;
}
}

ラベルは while と loop に付けられます。

break は対象のループを終了します。

break;
break value;
break 'outer;
break 'outer value;

値を付けた break は、loop の結果としてその値を返します。

continue は現在の繰り返しの残りを飛ばして、対象のループの次の繰り返しへ進みます。

continue;
continue 'outer;

continue に値を付けることはできません。

redo は対象のループで、現在の繰り返しをやり直すための構文です。

redo;
redo 'outer;

redo に値を付けることはできません。

return は現在の関数を終了し、呼び出し元へ戻ります。

return;
return value;

戻り値を返す場合、その値の型は関数で宣言した戻り値型と一致している必要があります。

値を返せるブロックでは、最後の式にセミコロンを付けないと、その式の値がブロック全体の結果になります。

function answer() -> i32 {
42
}