Kotlinのsealed classとcompanion objectを組み合わせて、状態遷移を効果的に管理する方法を紹介します。これは、特に状態マシンを構築する際に役立ちます。以下に、このアプローチを示す具体的なコードを提供します。

sealed class State {
    abstract fun nextState(): State

    companion object {
        val initialState: State = StateA()

        fun createStateMachine(): StateMachine {
            return StateMachine(initialState)
        }
    }
}

data class StateA(val data: Int = 0) : State() {
    override fun nextState(): State {
        return StateB(data + 1)
    }
}

data class StateB(val data: Int) : State() {
    override fun nextState(): State {
        if (data < 5) {
            return StateA(data)
        } else {
            return StateC()
        }
    }
}

class StateC : State() {
    override fun nextState(): State {
        return this // 状態遷移の終了
    }
}

class StateMachine(private var currentState: State) {
    fun transition() {
        currentState = currentState.nextState()
    }

    fun getCurrentState(): State {
        return currentState
    }
}

fun main() {
    val stateMachine = State.createStateMachine()

    for (i in 1..10) {
        println("Current State: ${stateMachine.getCurrentState()}")
        stateMachine.transition()
    }
}

このコードでは、sealed classを使用して異なる状態を表し、それぞれの状態で次の状態への遷移を定義しています。また、companion objectを使用して初期状態の管理と状態マシンの作成を行っています。最後に、main関数で状態遷移を実行し、状態の変化を確認できます。

この方法を使用することで、複雑な状態遷移を効果的に管理でき、Kotlinの強力な型安全性を活用できます。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です