· 15 min read
Kotlinのwhenとelseブロックについて
Kotlinは、Javaと100%の互換性を持つ静的型付けされたプログラミング言語で、より簡潔で生産的なコーディング体験を提供します。その中でも、when
とelse
ブロックはKotlinの強力な制御フローツールの一部であり、Javaのswitch
ステートメントよりもはるかに強力で柔軟です。
この記事では、Kotlinのwhen
とelse
ブロックの使用方法とその利点について詳しく説明します。具体的なコード例を通じて、これらの概念を理解し、あなたのKotlinプログラミングスキルを向上させる手助けをします。それでは、さっそく始めてみましょう!
Kotlinのwhenとは
Kotlinのwhen
は、Javaのswitch
ステートメントに似ていますが、より強力で柔軟性があります。when
は、値が一連の条件と一致するかどうかをチェックし、最初に一致したブロックのコードを実行します。
基本的な形式は次のとおりです:
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> print("x is neither 1 nor 2")
}
この例では、x
が1の場合、最初のブロックが実行され、“x == 1”が出力されます。x
が2の場合、次のブロックが実行され、“x == 2”が出力されます。x
が1でも2でもない場合、else
ブロックが実行され、“x is neither 1 nor 2”が出力されます。
when
は、単一の値だけでなく、範囲やコレクションに対しても動作します。また、is
キーワードを使用して型チェックを行うことも可能です。これらの機能により、when
は非常に強力な制御フローツールとなります。これらの詳細については、次のセクションで説明します。
whenを引数ありで使ってみよう
Kotlinのwhen
を引数ありで使う方法を見てみましょう。以下に基本的な使用方法を示します:
val x = 1
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> print("x is neither 1 nor 2")
}
このコードでは、x
が1の場合、“x == 1”と出力されます。x
が2の場合、“x == 2”と出力されます。x
が1でも2でもない場合、“x is neither 1 nor 2”と出力されます。
また、when
は複数の値をチェックすることも可能です。以下にその例を示します:
val x = 2
when (x) {
0, 1 -> print("x == 0 or x == 1")
else -> print("x is not 0 or 1")
}
このコードでは、x
が0または1の場合、“x == 0 or x == 1”と出力されます。それ以外の場合、“x is not 0 or 1”と出力されます。
これらの例からわかるように、when
を引数ありで使うと、値が特定の条件と一致するかどうかを簡単にチェックできます。次のセクションでは、さらに詳しくwhen
の使用方法を見ていきましょう。
Kotlinでのコードを見てみよう
Kotlinでのwhen
の使用例を見てみましょう。以下に、when
を使用して数値の範囲をチェックするコードを示します:
val x = 10
when (x) {
in 1..10 -> print("x is in the range")
!in 10..20 -> print("x is outside the range")
else -> print("none of the above")
}
このコードでは、x
が1から10の範囲内にある場合、“x is in the range”と出力されます。x
が10から20の範囲外にある場合、“x is outside the range”と出力されます。それ以外の場合、“none of the above”と出力されます。
また、when
はis
キーワードを使用して型チェックを行うことも可能です。以下にその例を示します:
val x: Any = "Hello"
when (x) {
is Int -> print("x is an Int")
is String -> print("x is a String")
else -> print("x is neither an Int nor a String")
}
このコードでは、x
がInt
型の場合、“x is an Int”と出力されます。x
がString
型の場合、“x is a String”と出力されます。それ以外の場合、“x is neither an Int nor a String”と出力されます。
これらの例からわかるように、Kotlinのwhen
は非常に強力で柔軟な制御フローツールです。次のセクションでは、Javaとの比較を通じてその強力さをさらに理解していきましょう。
Javaでのコードをみてみよう
Javaでの制御フローはswitch
ステートメントを使用しますが、Kotlinのwhen
と比較すると柔軟性に欠けます。以下に、Javaでのswitch
ステートメントの基本的な使用方法を示します:
int x = 1;
switch (x) {
case 1:
System.out.println("x == 1");
break;
case 2:
System.out.println("x == 2");
break;
default:
System.out.println("x is neither 1 nor 2");
}
このコードでは、x
が1の場合、“x == 1”と出力されます。x
が2の場合、“x == 2”と出力されます。x
が1でも2でもない場合、“x is neither 1 nor 2”と出力されます。
しかし、Javaのswitch
ステートメントは、Kotlinのwhen
と比較すると以下のような制限があります:
switch
は、整数型(byte、short、char、int)とEnum型、String型のみをサポートしています。それ以外の型(例えば、範囲やコレクション)はサポートしていません。case
文で複数の値をチェックすることはできません。それぞれの値に対して別々のcase
文を書く必要があります。case
文は、break
キーワードを忘れると、意図しない動作(フォールスルー)を引き起こす可能性があります。
これらの制限からわかるように、Kotlinのwhen
はJavaのswitch
よりもはるかに強力で柔軟な制御フローツールです。次のセクションでは、さらに詳しくwhen
の使用方法を見ていきましょう。
inで範囲を調べてみよう
Kotlinのwhen
では、in
キーワードを使用して値が特定の範囲に含まれるかどうかをチェックすることができます。以下にその例を示します:
val x = 10
when (x) {
in 1..10 -> print("x is in the range")
!in 10..20 -> print("x is outside the range")
else -> print("none of the above")
}
このコードでは、x
が1から10の範囲内にある場合、“x is in the range”と出力されます。x
が10から20の範囲外にある場合、“x is outside the range”と出力されます。それ以外の場合、“none of the above”と出力されます。
また、in
キーワードはコレクションに対しても使用することができます。以下にその例を示します:
val x = "apple"
val fruits = listOf("apple", "banana", "cherry")
when (x) {
in fruits -> print("x is a fruit")
else -> print("x is not a fruit")
}
このコードでは、x
がfruits
リストに含まれる場合、“x is a fruit”と出力されます。それ以外の場合、“x is not a fruit”と出力されます。
これらの例からわかるように、in
キーワードを使用すると、when
で範囲やコレクションのチェックを簡単に行うことができます。次のセクションでは、is
キーワードを使用した型判定について見ていきましょう。
isで型判定を行ってみよう
Kotlinのwhen
では、is
キーワードを使用して型判定を行うことができます。以下にその例を示します:
val x: Any = "Hello"
when (x) {
is Int -> print("x is an Int")
is String -> print("x is a String")
else -> print("x is neither an Int nor a String")
}
このコードでは、x
がInt
型の場合、“x is an Int”と出力されます。x
がString
型の場合、“x is a String”と出力されます。それ以外の場合、“x is neither an Int nor a String”と出力されます。
また、is
キーワードは、型チェックと同時に型変換も行います。これにより、is
ブロック内での追加のキャストは不要になります。以下にその例を示します:
val x: Any = "Hello"
when (x) {
is Int -> print(x + 1) // x is automatically cast to Int
is String -> print(x.length) // x is automatically cast to String
else -> print("x is neither an Int nor a String")
}
このコードでは、x
がInt
型の場合、x
は自動的にInt
にキャストされ、x + 1
が出力されます。x
がString
型の場合、x
は自動的にString
にキャストされ、x.length
が出力されます。それ以外の場合、“x is neither an Int nor a String”と出力されます。
これらの例からわかるように、is
キーワードを使用すると、when
で型判定を簡単に行うことができます。次のセクションでは、引数なしでwhen
を使用する方法について見ていきましょう。
whenを引数なしで使ってみよう
Kotlinのwhen
は、引数なしで使うことも可能です。この場合、when
は一連のブール値式を評価し、最初にtrue
と評価されたブロックのコードを実行します。以下にその例を示します:
val x = 10
when {
x < 10 -> print("x is less than 10")
x > 10 -> print("x is greater than 10")
else -> print("x is equal to 10")
}
このコードでは、x
が10より小さい場合、“x is less than 10”と出力されます。x
が10より大きい場合、“x is greater than 10”と出力されます。それ以外の場合、“x is equal to 10”と出力されます。
引数なしのwhen
は、複数の条件をチェックする複雑な制御フローを表現するのに便利です。また、if-else if-else
チェーンをより読みやすく表現するのにも使用できます。
これらの例からわかるように、Kotlinのwhen
は非常に強力で柔軟な制御フローツールです。次のセクションでは、これまでに学んだことをまとめていきましょう。
まとめ
この記事では、Kotlinのwhen
とelse
ブロックについて詳しく見てきました。when
は、値が一連の条件と一致するかどうかをチェックし、最初に一致したブロックのコードを実行する強力な制御フローツールです。
when
は、単一の値だけでなく、範囲やコレクションに対しても動作します。また、is
キーワードを使用して型チェックを行うことも可能です。これらの機能により、when
は非常に強力な制御フローツールとなります。
また、when
は引数なしで使うことも可能で、一連のブール値式を評価し、最初にtrue
と評価されたブロックのコードを実行します。これにより、複数の条件をチェックする複雑な制御フローを表現するのに便利です。
Javaのswitch
ステートメントと比較すると、Kotlinのwhen
はより強力で柔軟性があります。switch
は、整数型(byte、short、char、int)とEnum型、String型のみをサポートしています。それ以外の型(例えば、範囲やコレクション)はサポートしていません。また、case
文で複数の値をチェックすることはできません。それぞれの値に対して別々のcase
文を書く必要があります。さらに、case
文は、break
キーワードを忘れると、意図しない動作(フォールスルー)を引き起こす可能性があります。
これらの特性から、Kotlinのwhen
は、Javaのswitch
よりもはるかに強力で柔軟な制御フローツールであることがわかります。これらの知識を活用して、より効率的で読みやすいコードを書くことができるでしょう。引き続き、Kotlinの学習を楽しんでください!