0Pricing
Kotlin Academy · レッスン

Enumの定義

名前付き定数の集合を作成します

「Enumの定義」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。

enumとは

enum classは、名前付き定数の固定された集合を定義します。値が、少数の既知の選択肢のいずれかにしかなれない場合に使用します。

  • 各定数はenum型のインスタンスです。
  • それ以外の値が存在しないことをコンパイラが保証します。
enum class Direction {
    NORTH, SOUTH, EAST, WEST
}

fun main() {
    val d = Direction.NORTH
    println(d)
}

文字列だけではいけない理由

文字列では、タイプミスや無効な値が入り込む可能性があります。enumを使うと、無効な状態を不可能にできます。宣言された集合に含まれない値は、コンパイラによって拒否されます。

enum class Status { ACTIVE, INACTIVE }

fun main() {
    val s: Status = Status.ACTIVE
    println("Current: $s")
}

定数の宣言

定数は中括弧の間にカンマで区切って記述します。慣例として、UPPER_SNAKE_CASEで記述します。

enum class Size {
    SMALL, MEDIUM, LARGE, EXTRA_LARGE
}

fun main() {
    println(Size.EXTRA_LARGE)
}

各定数はオブジェクト

すべてのenum定数は、enum型のシングルトンインスタンスです。常にColor.REDのように、enum名を通して参照します。

enum class Color { RED, GREEN, BLUE }

fun main() {
    val c = Color.GREEN
    println(c == Color.GREEN)
}

enum値の比較

enum定数は==で比較できます。それぞれがシングルトンであるため、等価性と参照同一性が一致します。

enum class Light { RED, YELLOW, GREEN }

fun main() {
    val signal = Light.RED
    if (signal == Light.RED) println("Stop")
}

nameプロパティの読み取り

すべての定数には組み込みのnameプロパティがあり、宣言時に指定した文字列を正確に取得できます。

enum class Planet { MERCURY, VENUS, EARTH }

fun main() {
    val p = Planet.EARTH
    println(p.name)
}

文字列からvalueOfを取得する

自動生成されるvalueOf()関数は、一致する文字列をenum定数に変換します。一致しない文字列を渡すと例外がスローされます。

enum class Day { MON, TUE, WED }

fun main() {
    val d = Day.valueOf("TUE")
    println(d)
}

パラメータとしてenumを使う

enumは関数のパラメータに適しています。呼び出し側は、有効な定数のいずれかだけを渡せるためです。

enum class Level { LOW, HIGH }

fun setVolume(level: Level) {
    println("Volume set to $level")
}

fun main() {
    setVolume(Level.HIGH)
}

enumによる可読性の向上

Direction.NORTHと書かれたコードは、それ自体が説明になっています。0や1のようなマジックナンバーと比べて、意図が明確です。

enum class Gear { PARK, DRIVE, REVERSE }

fun main() {
    val current = Gear.DRIVE
    println("Gear is $current")
}

実践的な例

トランプのスートのような小さな集合をモデル化するには、enumが最適です。

enum class Suit { HEARTS, DIAMONDS, CLUBS, SPADES }

fun main() {
    for (suit in Suit.values()) {
        println(suit)
    }
}

定数が1つだけのenum

定数が1つだけでも有効です。保証された単一の値(簡易的なシングルトン)をモデル化するために使われることがあります。

enum class AppMode { PRODUCTION }

fun main() {
    println(AppMode.PRODUCTION)
}

理解度チェック

enumの定義について理解できているか確認しましょう。

まとめ

enumを定義する方法を学びました。

  • enum classは、名前付き定数の固定された集合を宣言します。
  • 各定数はシングルトンインスタンスで、enum名を通してアクセスします。
  • nameとvalueOf()は、定数と文字列を相互に変換します。
  • enumはコンパイル時に無効な値を防ぎます。
enum class Direction { NORTH, SOUTH, EAST, WEST }

fun main() {
    println(Direction.valueOf("EAST").name)
}

よくある質問

「Enumの定義」レッスンは無料ですか?

はい。「Enumの定義」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。

「Enumの定義」で何を学びますか?

名前付き定数の集合を作成します ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kotlin Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「Enumの定義」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKotlin Academyレッスンでコードを書いて実行できますか?

はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Enumの定義
  2. Enumのプロパティとメソッド
  3. whenとEnum
  4. Enumの値と序数
← Kotlin Academyに戻る