ここまで、Kotlin で使える変数の型をみてきましたが、最後に他の言語では見かけない Range 変数というものがあります。
これは何を表しているのかは想像がつきやすいのですが、どういった場面で使えるのだろうか、そして実際の開発現場では一般的に使われているのが気になりますよね。
ここでは、Range を使った範囲を扱う変数について紹介します。
基本は整数の範囲を扱う変数が活躍する
まずは、整数の範囲を扱う変数を定義してみます。
1 2 3 4 | fun main(args: Array<String>) { val range_a: IntRange = 11..20 println(range_a) } |
プログラムの実行結果は以下の通りです。
11..20
範囲に含まれるかのチェックをしてみる
では、この変数を使って何か判定をさせてみたいと思います。
例えば、この記事を書いているのは 8 月 15 日なので、15 がこの範囲にあるかチェックしてみましょう。
1 2 3 4 5 6 | fun main(args: Array<String>) { val range_a: IntRange = 11..20 val today: Int = 15 val is_range = today in range_a println(is_range) } |
結果は true になります。15 日は 11 日から 20 日の間にありますからね。
逆に含まれない場合をチェックしてみます。
1 2 3 4 5 6 | fun main(args: Array<String>) { val range_a: IntRange = 11..20 val today: Int = 15 val is_range = today !in range_a println(is_range) } |
in の前にエクスクラメーションマーク(!)を付けて否定形にしてみました。
当然、結果は false になります。
Range変数の使いどころ
上記の in で範囲かどうかのチェックをした際に Boolean 型の結果を受け取りましたが、この範囲を取り扱う変数は、if などの条件式や、for などの繰り返し処理で活躍できる場面がありそうです。
if文
if 文の場合は先ほどのサンプルと同じく、特定の整数が範囲変数に含まれるかどうか。
1 2 3 4 5 6 | val range_a: IntRange = 11..20 val today: Int = 15 if (today in range_a) { println("${today}日は${range_a}に含まれています") } |
単純ですが結果は以下の通り。
15日は11..20に含まれています
範囲の最初と最後だけの数値を持っておき、そこに該当の値が含まれるかを Range 変数を使わずに判定しようとした場合、if 文の書き方は以下が一般的ではないかと思います。
1 2 3 4 5 | val today: Int = 15 if (11 <= today && today <= 20) { println("${today}日は11日から20日の間に含まれています") } |
for文
同じように for 文でも繰り返しの範囲に活用できます。
1 2 3 4 5 6 7 8 | val range_a: IntRange = 11..20 val today: Int = 15 for (a in range_a) { if (a == today) { println("今日は${today}日で${range_a}に含まれています") } } |