sealed class OrderStatus {
object Pending : OrderStatus()
data class Confirmed(val confirmedAt: String) : OrderStatus()
data class Shipped(val trackingNumber: String) : OrderStatus()
data class Delivered(val deliveredAt: String) : OrderStatus()
data class Cancelled(val reason: String) : OrderStatus()
}
fun describeStatus(status: OrderStatus): String = when (status) {
OrderStatus.Pending -> "Ожидает подтверждения"
is OrderStatus.Confirmed -> "Подтверждён: ${status.confirmedAt}"
is OrderStatus.Shipped -> "Отправлен, трек-номер: ${status.trackingNumber}"
is OrderStatus.Delivered -> "Доставлен: ${status.deliveredAt}"
is OrderStatus.Cancelled -> "Отменён. Причина: ${status.reason}"
}
fun main() {
val statuses = listOf(
OrderStatus.Pending,
OrderStatus.Confirmed("2026-09-22 10:00"),
OrderStatus.Shipped("RU123456789"),
OrderStatus.Delivered("2026-09-23 18:30"),
OrderStatus.Cancelled("Клиент передумал")
)
statuses.forEach { println(describeStatus(it)) }
// Если закомментировать одну ветку when, компилятор выдаст ошибку:
// 'when' expression must be exhaustive. Add the '...' branch or an 'else' branch.
}