本記事では、Kotlinのループ処理として、以下の内容について解説します。
- while文
- do-while文
- for文
- foreach文
- repeat文
- Javaとの違い
forとwhileを使った繰り返し処理
while文
while文は条件式の結果がtrueに評価されている間、while文の中の処理を繰返し実行します。
基本的な構文は以下のとおりです。
while (条件式) { 繰返し実行する処理 }
最初に条件式を評価するため、初期状態で条件式の結果がfalseとなる場合は、一度も繰返し処理が実行されません。
また、繰返し処理が最後まで到達すると、再度条件式を評価します。
条件式の結果がtrueの間、繰返し処理を実行するため、条件式がずっとtrueのままだと無限ループになってしまいますので注意が必要です。
次に例文です。
var i = 0 while (i < 3) { println(i) i++ }
このプログラムの実行結果は、以下となります。
0 1 2
do-while文
while文は最初に条件式を評価するため、状況によっては1度も繰返し処理が実行されない場合があります。
これに対して、最低1回は繰返し処理を実行したい場合に用いるのがdo-while文です。
基本的な構文は以下のとおりです。
do { 繰返し実行する処理 } while (条件式)
この構文では条件式は繰返し処理が実行された最後に評価され、評価結果がtrueの場合は再度繰返し処理を実行し、falseの場合は繰返し処理を抜けます。
例文は以下のとおりです。
var i = 0 do { println(i) i++ } while (i < 3)
このプログラムの実行結果は、以下となります。
0 1 2
for文
Kotlinにおけるfor文は基本的なfor-in文の他にも、for-until文、for-step文、for-downTo文など様々なfor文が用意されています。
それぞれ解説していきます。
for-in文
Kotlinのfor文の基本的な形は、for-in文です。
構文は以下のとおりです。
for (変数名 in コレクション) { 繰返し実行する処理 }
コレクションに当たる部分は、配列やリストに当たります。
また、Javaでいうところの
for (int i = 0; i <= 3; i++)
というのは、0..3というレンジ指定で表すことができます。
レンジで指定した場合は、最後の数もループに含まれる点に注意が必要です。
例文は以下のとおりです。
for (i in 1..3) { println(i) }
このプログラムの実行結果は、以下となります。
1 2 3
for-until文
for-in文にレンジで指定した場合に最後の数をループに含めたくない場合には、for-until文を使います。
構文は以下のとおりです。
for (変数 in 最小値 until 最大値) { 繰返し処理 }
先程のとおり、ループに最大値を含めないので、Javaでいうところの
for (int i = 最小値; i < 最大値; i++)
となります。
例文は以下のとおりです。
for (i in 1 until 3) { println(i) }
このプログラムの実行結果は、以下となります。
1 2
for-step文
これまでのfor文は、レンジを指定した場合に、カウントアップする値は必ず1でしたが、任意の値を増やしていきたいということもあります。
そのような場合には、for-step文を使います。
構文は以下のとおりです。
for (変数 in 最小値..最大値 step カウントアップ値) { 繰返し処理 }
カウントアップ値をいくつかにするかによって、ループの回数が変わってきます。
例えば、最小値が1、最大値が10、カウントアップ値が2とすると、1、3、5、7、9の5回の繰返し処理が実行されます。
例文は以下のとおりです。
for (i in 1..3 step 2) { println(i) }
このプログラムの実行結果は以下のとおりです。
1 3
for-downTo文
ここまでは、ループに伴い最小値から最大値へとカウントアップしていきましたが、カウントダウンしていきたいということもあります。
そのような場合には、for-downTo文を使います。
構文は以下のとおりです。
for (変数 in 最大値 downTo 最小値) { 繰返し処理 }
downToの左側に最大値、右側に最小値を記述する点がこれまでと逆になりますので、注意が必要です。
例文は以下のとおりです。
for (i in 3 downTo 1) { println(i) }
このプログラムの実行結果は以下のとおりです。
3 2 1
リストのfor文
for-in文のコレクションに配列やリストを指定する場合は、以下のようになります。
var list = arrayOf("Kotlin", "Java", "Python") for (value in list) { println(value) }
このプログラムの実行結果は以下のとおりです。
Kotlin Java Python
マップのfor文
マップをfor文に指定するときは、変数にkeyとvalueを指定することで、両方取得することができます。
var map = mapOf(1 to "Kotlin", 2 to "Java", 3 to "Python") for ((key, value) in map) { println("$key = $value") }
このプログラムの実行結果は以下のとおりです。
1 = Kotlin 2 = Java 3 = Python
foreach文
foreach文は、リストやマップに対して使うことが多いですが、レンジを指定することもできます。
例文は以下のとおりです。
(1..3).forEach { println(it) }
itという変数で、ループしている値を取得することができます。
(なぜitで取得できるかは別の機会に説明します)
このプログラムの実行結果は以下のとおりです。
1 2 3
repeat文
指定回数だけ単純にループしたい場合には、repeat文を使うこともできます。
構文は以下のとおりです。
repeat(繰返し回数) { 繰返し処理 }
例文は以下のとおりです。
repeat(3) { println(it) }
itという変数で、ループしているインデックスを取得することができます。
このプログラムの実行結果は以下のとおりです。
0 1 2
Javaとの違い
ループ処理におけるJavaとの比較をまとめると、以下のようになります。
- while文、do-while文においては、JavaとKotlinで大きな違いはない。
- for文においては、Kotlinではレンジを指定することができたり、until、step、downToなどのJavaにはない様々なループの仕方を変える文法が用意されている。
- repeatは、JavaにはないがKotlinで使うことができる。
Javaでも同じことはできるが、専用の文法を用意することで、より手軽に使うことができるようになったという感じかと思います。
まとめ
Kotlinのwhile、forについてまとめると以下のようになります。
- whileはJavaと同じように扱うことができる
- forは主に配列やリスト、マップなどを扱うが、レンジを使うことで単純なループ処理も簡単に記述できる
- foreachやrepeatなどを使うことで、よりループ処理を便利に使うことができる
今回は、forとwhileを使った繰り返し処理について解説しました。
以上、参考になれば幸いです。
コメント