Sobes.tech
Junior — Middle

Фарқи истифодаи sealed class бо enum дар бораи конструкторҳо ва имконияти эҷод кардан чӣ гуна аст?

sobes.tech AI

Ҷавоб аз AI

Enum дар Kotlin (ва Java) ифодаи маҷмӯи доимӣ аст. Ҳар як enum маҷмӯи маҳдуди намунаҳоро дорад, ки дар эълон худ муайян карда шудаанд. Конструкторҳои enum ҳамеша хусусӣ мебошанд, ва наметавон намунаҳои нав эҷод кард — танҳо онҳое, ки эълон шудаанд.

Sealed class (синфи басташуда) синфи абстрактӣ бо маҷмӯи маҳдуди наслеҳон аст, ки дар ҳамон файл эълон мешаванд. Баръакс аз enum, sealed class имкон медиҳад, ки намудҳои гуногун бо сохтор ва ҳолати гуногун эҷод шаванд. Конструкторҳои sealed class метавонанд кушода ё баста бошанд, ва метавон намунаҳои нав аз наслеҳон эҷод кард, на танҳо константҳои маҳдуд.

Масалан:

// Enum бо конструктори хусусӣ ва намунаҳои маҳдуд
enum class Direction(val degrees: Int) {
    NORTH(0), EAST(90), SOUTH(180), WEST(270)
}

// Sealed class бо наслеҳон ва конструкторҳои гуногун
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val error: Throwable) : Result()
}

val res: Result = Result.Success("OK")

Инчунин, enum маҳдуд аст ба маҷмӯи намунаҳои маҳдуд бо конструктори хусусӣ, дар ҳоле ки sealed class бештар чандир аст ва имкон медиҳад, ки намудҳои гуногун бо конструкторҳои худ ва ҳолатҳо эҷод шаванд.