0Pricing
Kotlin Academy · レッスン

Enumのプロパティとメソッド

動作を追加します

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

enumはデータを保持できる

enum定数はプロパティを保持できます。enumクラスにコンストラクタを宣言し、各定数を列挙するときに値を渡します。

enum class Coin(val cents: Int) {
    PENNY(1), NICKEL(5), DIME(10)
}

fun main() {
    println(Coin.DIME.cents)
}

コンストラクタパラメータ

各定数の後ろの括弧内に記述する値は、enumのコンストラクタに渡す引数です。これらは、その定数の読み取り専用プロパティになります。

enum class Planet(val gravity: Double) {
    EARTH(9.8), MOON(1.6)
}

fun main() {
    println(Planet.MOON.gravity)
}

複数のプロパティ

enumでは、複数のプロパティを一度に宣言できます。

enum class Fruit(val color: String, val calories: Int) {
    APPLE("red", 95),
    BANANA("yellow", 105)
}

fun main() {
    val f = Fruit.BANANA
    println("${f.color} ${f.calories}")
}

メソッドの追加

enum本体には通常の関数を宣言できます。すべての定数がそれらを共有します。

enum class Temp(val celsius: Int) {
    COLD(5), WARM(25);

    fun toFahrenheit(): Int = celsius * 9 / 5 + 32
}

fun main() {
    println(Temp.WARM.toFahrenheit())
}

セミコロンの規則

enumに定数以外のメンバー(メソッドやプロパティ)がある場合、最後の定数の後ろにセミコロンを置く必要があります。

enum class Op {
    ADD, SUB;

    fun describe() = "Operation: $name"
}

fun main() {
    println(Op.ADD.describe())
}

定数ごとの抽象メソッド

enumでは抽象メソッドを宣言でき、各定数がそれをオーバーライドします。これにより、各定数に独自の振る舞いを持たせられます。

enum class Math {
    PLUS { override fun apply(a: Int, b: Int) = a + b },
    TIMES { override fun apply(a: Int, b: Int) = a * b };

    abstract fun apply(a: Int, b: Int): Int
}

fun main() {
    println(Math.TIMES.apply(3, 4))
}

計算プロパティ

プロパティのgetterでは、定数のデータに基づいて値を計算できます。

enum class Account(val balance: Int) {
    SAVINGS(1000), CHECKING(50);

    val isRich: Boolean get() = balance > 500
}

fun main() {
    println(Account.SAVINGS.isRich)
}

データと振る舞いの組み合わせ

プロパティとメソッドを組み合わせることで、enumに豊かな閉じたドメインをモデル化させられます。

enum class Shape(val sides: Int) {
    TRIANGLE(3), SQUARE(4);

    fun describe() = "$name has $sides sides"
}

fun main() {
    println(Shape.SQUARE.describe())
}

ロジックでのプロパティの利用

定数のプロパティは、計算や条件分岐で便利に利用できます。

enum class Tier(val discount: Int) {
    BRONZE(5), GOLD(20)
}

fun price(base: Int, tier: Tier) = base - base * tier.discount / 100

fun main() {
    println(price(100, Tier.GOLD))
}

プロパティのデフォルト値

enumのコンストラクタでも、他のコンストラクタと同様にパラメータのデフォルト値を指定できます。

enum class Role(val canEdit: Boolean = false) {
    VIEWER, EDITOR(true)
}

fun main() {
    println(Role.VIEWER.canEdit)
    println(Role.EDITOR.canEdit)
}

完全なモデル

ここでは、データと振る舞いの両方を備えたenumでHTTPステータスをモデル化しています。

enum class Http(val code: Int) {
    OK(200), NOT_FOUND(404);

    fun isError() = code >= 400
}

fun main() {
    println(Http.NOT_FOUND.isError())
}

理解度チェック

enumのプロパティとメソッドについて理解できているか確認しましょう。

まとめ

enumが振る舞いを保持できることを学びました。

  • コンストラクタを追加すると、定数にプロパティを持たせられます。
  • 共有メソッドを宣言できます(定数の後ろにセミコロンを置きます)。
  • 抽象メソッドを使うと、各定数が独自の振る舞いを定義できます。
  • 計算プロパティやデフォルト値を持つプロパティも通常どおり機能します。
enum class Coin(val cents: Int) {
    PENNY(1), DIME(10);
    fun double() = cents * 2
}

fun main() {
    println(Coin.DIME.double())
}

よくある質問

「Enumのプロパティとメソッド」レッスンは無料ですか?

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

「Enumのプロパティとメソッド」で何を学びますか?

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

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

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

「Enumのプロパティとメソッド」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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