Genta Hirauchi

最終更新日:2020/02/02

【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を使用するメリットでも紹介した、安全性の向上の所以です。

Point
  • 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に引数を持たせ初期化することで、パラメータを持たせることができます。

Point
  • 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())

// 赤です

抽象メソッドを定義し、各定数で、抽象メソッドをオーバーライドすることで、メソッドを宣言することができます。

Point
  • enumにはメソッドを持たせることができる
  • メソッドを呼び出すには、変数.メソッドと実装する

まとめ

  • enumの定数は、カンマで区切って列挙する
  • enumを使用することで、安全性が向上する
  • enumにはパラメータを持たせることができる
  • パラメータにアクセスするには、変数.パラメータ名と実装する
  • enumにはメソッドを持たせることができる
  • メソッドを呼び出すには、変数.メソッドと実装する