Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
範囲・for ループ
Kotlin の範囲(Range)は『..』や『until』などで数値の区間を表すオブジェクトです。『for』ループと組み合わせることで、簡潔な繰り返し処理が書けます。
構文
// 範囲の生成です。
1..10 // 1 以上 10 以下(終端を含む)
1 until 10 // 1 以上 10 未満(終端を含まない)
10 downTo 1 // 10 から 1 へ降順
1..10 step 2 // 1, 3, 5, 7, 9(ステップ指定)
// for ループの基本形です。
for (変数 in 範囲またはコレクション) {
// 処理
}
構文一覧
| 構文 | 概要 |
|---|---|
| a..b | a 以上 b 以下の閉区間を表します。文字の範囲にも使えます。 |
| a until b | a 以上 b 未満の半開区間を表します。インデックスの最大値に合わせやすいため配列走査でよく使います。 |
| a downTo b | a から b へ降順の範囲を表します。 |
| 範囲 step n | ステップ幅を n に指定します。 |
| in 範囲 | 値が範囲に含まれるか判定します。 |
| !in 範囲 | 値が範囲に含まれないか判定します。 |
| withIndex() | コレクションをインデックス付きで反復します。 |
サンプルコード
fun main() {
// 基本的な範囲ループです。
for (i in 1..5) {
print("$i ") // 『1 2 3 4 5 』と出力されます。
}
println()
// until で終端を含まないループです。
val list = listOf("A", "B", "C")
for (i in 0 until list.size) {
print("${list[i]} ") // 『A B C 』と出力されます。
}
println()
// downTo で逆順ループです。
for (i in 5 downTo 1) {
print("$i ") // 『5 4 3 2 1 』と出力されます。
}
println()
// step でステップ幅を指定します。
for (i in 0..10 step 3) {
print("$i ") // 『0 3 6 9 』と出力されます。
}
println()
// コレクションを直接 for で反復できます。
val fruits = listOf("りんご", "みかん", "ぶどう")
for (fruit in fruits) {
println(fruit) // 各フルーツ名が出力されます。
}
// インデックスも取得したい場合は withIndex() を使います。
for ((index, value) in fruits.withIndex()) {
println("$index: $value") // 『0: りんご』などと出力されます。
}
// 範囲の in 演算子で包含判定もできます。
val score = 85
if (score in 70..89) {
println("B ランクです。") // 『B ランクです。』と出力されます。
}
// 文字の範囲も使えます。
for (ch in 'A'..'E') {
print("$ch ") // 『A B C D E 』と出力されます。
}
}
概要
Kotlin の範囲はコレクションのインデックス操作でよく活用されます。配列やリストのインデックス走査には『0 until list.size』よりも『list.indices』を使うとより簡潔です。また、ラベル付き break・continue(例: 『break@outer』)で多重ループの制御も可能です。
範囲は『when』の中でも使えます(詳細は『when 式』を参照)。高階関数を使った反復には『高階関数』も参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。