for
読み:フォー
外語:for
殆どの高級言語に存在する予約語の一つで、繰り返し処理を記述をするために用いる。
概要
プログラミング言語ごとに仕様が異なりそれぞれに特徴がある。
ループの条件(または終了判定の式)はほぼ例外がなくあり、それ以外は、ループ開始前の初期化、あるいはループごとの処理を集中して記述することができることがある。
特徴
C/C++
C/C++のfor文は次の構文を取る。
for (変数 = 初期値; 条件; ループごとの処理) { /* ループ処理 */ }
三つの要素がありセミコロン;で区切るが、各々省略することができる。
例えば0から9までのループであれば、次のように書くことができる。
for (i = 0; i < 10; ++i) {
printf("%d\n", i);
}
中央にある i < 10 の部分は、i <= 9 でも動きは同じになる。
通常は1ずつ増やすので、3番目の要素は ++i または i++ と書くことになる。Cではどちらで書いても同じだが、C++の場合は ++i のように前置インクリメントとすると効率があがる(高速に動作する)。
Kotlin
Kotlinのfor
Kotlinの場合、forは多機能である。
他のプログラミング言語と同様に指定した数の範囲内でループする機能はもちろん、ListやMapの展開をする機能があり便利に使うことができる。
Kotlinでは、forの他に、forEach、while、do〜while構文でループを構成できる。
Rangeでのループ
基本
指定した数の範囲内でループさせる場合、基本は次の通り。
for (変数 in 条件) { /* ループ処理 */ }
条件の書き方は様々な方法があり、基本はRange型と呼ばれる記法だが、until、step、downToといった書き方もできる。
基本的なRange型の書き方は次の通りで、下の式は0と5を含めて、0〜5までループする。
for (i in 0..5) { /* ループ処理 */ }
until
A until B の構文を条件に用いる方法もある。A until B の構文は、Aは含むがBは含まない。次は0から4までループすることになる。
for (i in 0 until 5) { /* ループ処理 */ }
downTo
A downTo B の構文を条件に用いる方法もある。A downTo B の構文は、AとBの双方を含み、デクリメントしてゆく。このためAにはBよりも大きな値を指定する必要がある。
for (i in 5 downTo 0) { /* ループ処理 */ }
この場合、5、4、3、2、1、0、となる。
stepの併用
通常は1ずつ増えるが、step を用いて変えることができる。
for (i in 0..9 step 2) { /* ループ処理 */ }
for (i in 0 until 10 step 2) { /* ループ処理 */ }
どちらの場合も2ずつ進むため、0、2、4、6、8と増える。8の次は10になるが、ループ条件から外れるため実行されず、ループが終了する。
untilの場合はstepに指定した値ずつインクリメントされ、downToの場合はstepに指定した値ずつデクリメントされる。
Listの展開
書式
Kotlinの場合、次のように書くと、Listを展開してくれる。
for (変数 in List) { /* ループ処理 */ }
ループするごとに、変数にはListの要素が入る。
indices
直接要素を得ず、インデックスを得る方法もある。その場合は、indicesを使用する。
for (index in list.indices) {
val value = list[index]
}
インデックスは0から順番の整数である。
withIndex
インデックスと要素を両方同時に得る方法もある。その場合は、withIndexを使用する。
for ((index, value) in list.withIndex()) { /* ループ処理 */ }
インデックスは0から順番の整数である。
Mapの展開
Kotlinの場合、次のように書くと、Mapを展開してくれる。
for ((Key変数, Value変数) in Map) { /* ループ処理 */ }
ループするごとに、Mapの要素であるKeyとValueがそれぞれに変数に入る。
再検索