Ответ
Стейт-машина (конечный автомат) — это модель поведения системы, где состояние объекта изменяется в ответ на события. Состоит из:
- Состояний (States) — возможные положения системы (например,
IDLE,LOADING,SUCCESS) - Переходов (Transitions) — правила смены состояний при событиях
- Действий (Actions) — операции при переходе/состоянии
Пример для загрузки данных:
sealed class State {
object Idle : State()
object Loading : State()
data class Success(val data: String) : State()
data class Error(val message: String) : State()
}
fun handleEvent(event: Event, currentState: State): State {
return when (currentState) {
is State.Idle -> when (event) {
Event.StartLoading -> State.Loading
else -> currentState
}
is State.Loading -> when (event) {
Event.DataLoaded -> State.Success(event.data)
Event.Error -> State.Error(event.message)
else -> currentState
}
else -> currentState
}
}
Используется для:
- Четкого управления сложными потоками (аутентификация, UI-логика)
- Предсказуемости — каждое состояние явно определено
- Упрощения тестирования