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がそれぞれに変数に入る。

再検索