[Android/Kotlin]ループ文

目次

概要

for文によるループはどの言語でも同じだし、どの言語でも最重要項目となっていると思うけど、
言語によってどれも微妙に書き方が違う場合がある。
今回はよく使いそうなループ分の書き方を書く。

ソースコード

指定した数までループする

これは最も基本となるループ文。変数を指定して、1ずつ増やしていく。
そして、その変数の値が一定値に達したらループ文を終了して次の処理へ進むというもの。

書き方
for ([変数名] in [初期値] .. [終値]) {
    // ループ処理
}
Kotlin

指定した数までループする
for (index in 1..5) {
    Log.d("NormalLoop", index.toString())
}
Kotlin
出力
D/NormalLoop: 1
D/NormalLoop: 2
D/NormalLoop: 3
D/NormalLoop: 4
D/NormalLoop: 5
Kotlin

配列の要素数分ループする

他の言語でもよくある配列の要素数分ループさせる。
「for(変数名 in 配列)」という図式でできている。こうすることでループの要素の取りこぼしとか、要素数外の領域へ踏み込んでしまうリスクを回避できるのは昔からありがたい!

配列の要素数分ループ
val jobs = listOf<String>("戦士", "武闘家", "僧侶", "魔法使い", "遊び人", "商人", "盗賊", "賢者")
for (job in jobs) {
    Log.d("jobs", job)
}
Kotlin
出力
D/jobs: 戦士
D/jobs: 武闘家
D/jobs: 僧侶
D/jobs: 魔法使い
D/jobs: 遊び人
D/jobs: 商人
D/jobs: 盗賊
D/jobs: 賢者
Kotlin

ちなみに…

要素数を一緒にとりたい場合は以下のようにwithIndex()を使用する。
その場合、変数部分は(index, value)のように、最初の変数が要素数、二番目が配列の中身になる。

配列の要素数分ループ(withIndex)
val jobs = listOf<String>("戦士", "武闘家", "僧侶", "魔法使い", "遊び人", "商人", "盗賊", "賢者")
for ((index,job) in jobs.withIndex()) {
    Log.d("jobs", index.toString() + ":" + job)
}
Kotlin
出力
D/jobs: 0:戦士
D/jobs: 1:武闘家
D/jobs: 2:僧侶
D/jobs: 3:魔法使い
D/jobs: 4:遊び人
D/jobs: 5:商人
D/jobs: 6:盗賊
D/jobs: 7:賢者
Kotlin

Mapのループ処理

Mapのようにキー情報とセットでまとめてループ処理を行う。
基本的にはwithIndex()を使用したものと似ている。
そして、今回はLog.dではなくprintln文で出力している。
こっちの方が楽だ…

Mapのループ処理
val party = mapOf("ライアン" to "戦士", "アリーナ" to "姫", "クリフト" to "神官", "ブライ" to "魔法使い", "トルネコ" to "武器屋", "マーニャ" to "踊り子", "ミネア" to "占い師")
for ((name, job) in party) {
    println("$name : $job")
}
Kotlin
出力
I/System.out: ライアン : 戦士
I/System.out: アリーナ : 姫
I/System.out: クリフト : 神官
I/System.out: ブライ : 魔法使い
I/System.out: トルネコ : 武器屋
I/System.out: マーニャ : 踊り子
I/System.out: ミネア : 占い師
Kotlin

参考文献
Genta Hirauchi「【Kotlin基礎】Kotlinでfor文によるループ処理を実装する方法」