8-4. while ループ、do-while ループ
概要
while ループと do-while ループは、条件が満たされている間、コードブロックを繰り返し実行するための制御フロー構造です。
書式
while というキーワードに続けて、丸括弧 ( ) で条件式を囲みます。その後、波括弧 { } で実行するブロックを記載します。
while (条件式) {
文
}
上記の while ループでは、以下の順で処理が実行されます。いわゆる前判定になります。
- まず、while の右側の ( ) 内の条件式をチェック
- true であれば、そのあとの 処理ブロック { } 内の処理を実行
処理によっては、最低一回は処理ブロック { } を実行し、そのあとで繰り返し条件を判定するという流れで行い場合もあります。
このような場合は、do-while ループを使います。
do {
文
} while (条件式)
この do-while ループでは、以下のように後判定でのループとなります。
- まず、処理ブロック { } 内を実行
- その後、while の右側の条件式をチェックし、true であれば再度 処理ブロックを実行
while ループと do-while ループの使い分け
- ループに入る前に条件をチェックする必要がある場合は、 while ループを使用します。
- ループ本体を少なくとも一度は実行する必要がある場合は、 do-while ループを使用します。
使用例
while ループ
while ループは、条件式が真である間、ループ本体のコードブロックを繰り返し実行します。 ループに入る前に条件式が評価されるため、 条件が最初から偽の場合はループ本体が一度も実行されません。
この例では、count が 5 未満である間、ループ本体が実行され、count の値が出力され、count が 1 ずつ増加します。
fun main (){ var count = 0 while (count < 5) { println("Count: $count") count++ } }
出力
Count: 0
Count: 1
Count: 2
Count: 3
Count: 4
do-while ループ
do-while ループは、while ループと似ていますが、ループ本体が少なくとも一度は実行される点が異なります。 ループ本体を実行した後、 条件式が評価され、 真であればループ本体が再度実行されます。
この例でも、count が 5 未満である間、ループ本体が実行されます。
fun main (){ var count = 0 do { println("Count: $count") count++ } while (count < 5) }
出力
Count: 0
Count: 1
Count: 2
Count: 3
Count: 4
以下の例のほうが明確な差異がわかるかもしれません。
while や do-while の前に count を 5 にしていますが、while の場合は、前判定のためループ本体は実行されませんが、do-while は後判定のため 一度実行されます。
fun main (){ var count = 5 while (count < 5) { println("while Count: $count") count++ } count = 5 do { println("do-while Count: $count") count++ } while (count < 5) }
出力
do-while Count: 5
break と continue
while ループと do-while ループでも、break 文と continue 文を使用できます。
break 文は、ループを即座に終了させます。
continue 文は、現在の反復をスキップして次の反復に進みます。
break, continue については以下にも記載しています。