公開日:2020/02/02更新日:2020/08/03
【Kotlin基礎】Kotlinでenumを使う方法を解説

- enumってなに?
- enumの使い方が知りたい。
みなさんは実装でenumを使用していますか?
Kotlinを学び始めたばかりの方は、enumの使い方がわからなかったり、そもそもenumという言葉を初めて聞いたという方もいらっしゃると思います。
そこで本記事では、Kotlinでenumを使用する方法を、サンプルコードを交え、わかりやすく解説していきたいと思います。
目次
kotlinでenumを使う方法
enumとは?
まずは、enumがどのようなものなのかについて解説していきます。
enumとは、列挙型クラス (Enum Classes)と呼ばれる、定数を列挙するクラスのことをいいます。
enumを使用するメリットは、安全性がたかまることです。enumで定数をグループ化しておくことで、グループに含まれない定数が使用されることを防ぐことができます。
【公式ドキュメント】 : 列挙型クラス – Kotlin Programming Language
enumの基本的な使い方
では、enumの使用方法について解説していきます。
enumクラスは以下のように実装します。
- Kotlin
enum class クラス名 {
定数1, 定数2, 定数3
}
enumに列挙する定数は、カンマ(,)で区切って列挙します。
enumの定数を使用するには、
- Kotlin
クラス名.定数名
というように記述します。
では、enumを使用した場合と、enumを使用しない場合のコードを比較してみましょう。
- enum使用
- enum未使用
enum class Color {
RED, GREEN, BLUE
}
val color: Color = Color.RED
when(color) {
Color.RED -> println("赤です")
Color.GREEN -> println("緑です")
Color.BLUE -> println("青です")
// Color.YELLOW -> println("黄です")
}
// 赤です
companion object {
const val RED = "red"
const val GREEN = "green"
const val BLUE = "blue"
}
val color = RED
when(color) {
RED -> println("赤です")
GREEN -> println("緑です")
BLUE -> println("青です")
"yellow" -> println("黄です")
}
// 赤です
RED、GREEN、BLUEとう定数を定義し、変数colorの値によって、出力内容を変更するサンプルコートです。
このサンプルコードで注目していただきたいのは、定数の型です。
enumを使用しない場合のコードでは、定数はString型で定義されております。ですので、whenの条件分岐の候補に”yellow”という文字列を指定することができてしまいます。
一方enumを使用した場合のコードでは、Colorというenumクラスが型となるため、列挙されているRED、GREEN、BLUE以外を指定することができません。
これが、enumを使用するメリットでも紹介した、安全性の向上の所以です。
- enumの定数は、カンマで区切って列挙する
- enumを使用することで、安全性が向上する
enumにパラメータを持たせる方法
続いて、enumにパラメータを持たせる方法を紹介致します。パラメータを持たせるには、以下のように実装します。
- Kotlin
enum class Color(val rgb: Int, val description: String) {
RED(0xFF0000, "赤です"),
GREEN(0x00FF00, "緑です"),
BLUE(0x0000FF, "青です")
}
val color: Color = Color.RED
println(color.description)
// 赤です
enumに引数を持たせ初期化することで、パラメータを持たせることができます。
- enumにはパラメータを持たせることができる
- パラメータにアクセスするには、変数.パラメータ名と実装する
enumでメソッドを宣言する方法
最後に、enumでメソッドを宣言する方法を紹介致します。メソッドを宣言するには、以下のように実装します。
- Kotlin
enum class Color {
RED {
override fun showDescription(): String {
return "赤です"
}
},
GREEN {
override fun showDescription(): String {
return "緑です"
}
},
BLUE {
override fun showDescription(): String {
return "青です"
}
};
abstract fun showDescription(): String
}
val color: Color = Color.RED
println(color.showDescription())
// 赤です
抽象メソッドを定義し、各定数で、抽象メソッドをオーバーライドすることで、メソッドを宣言することができます。
- enumにはメソッドを持たせることができる
- メソッドを呼び出すには、変数.メソッドと実装する
まとめ
- enumの定数は、カンマで区切って列挙する
- enumを使用することで、安全性が向上する
- enumにはパラメータを持たせることができる
- パラメータにアクセスするには、変数.パラメータ名と実装する
- enumにはメソッドを持たせることができる
- メソッドを呼び出すには、変数.メソッドと実装する
関連記事