Middle
Դու ծանոթ ես sealed դասարաններին և ինչ է նրանց առանձնահատկությունը?
sobes.tech AI
Պատասխան AI-ից
Այո, ծանոթ եմ:
sealed դասերի առանձնահատկությունն այն է, որ նրանք թույլ են տալիս սահմանափակել ժառանգության հիերարխիան։ Բոլոր ուղղակի ենթատեսակները sealed դասի պետք է հայտարարվեն նույն ֆայլում։ Սա ապահովում է, որ կոմպիլատորը գիտի բոլոր հնարավոր ենթատեսակները, ինչը օգտակար է when արտահայտություններում լրիվության ստուգման համար։
Օրինակ՝
sealed class Result {
data class Success(val message: String) : Result()
data class Error(val code: Int, val description: String) : Result()
object Loading : Result() // Սինգլթոն բեռնումային վիճակի համար
}
fun processResult(result: Result) {
when (result) {
is Result.Success -> println("Հաջողություն: ${result.message}")
is Result.Error -> println("Սխալ ${result.code}: ${result.description}")
Result.Loading -> println("Բեռնվում...")
// `else` անհրաժեշտ չէ, քանի որ կոմպիլատորը գիտի բոլոր տարբերակները
}
}
Առավելություններ՝
- Անվտանգություն: Գերաշխավորում է
whenարտահայտությունների լրիվությունը առանցelse-ի անհրաժեշտության։ - Ակնհայտություն: Բացահայտում է սահմանափակ հնարավոր վիճակների կամ ենթատեսակների հավաքածուն։
- Կառավարում: կանխում է արտաքին անկառավարելի ժառանգությունը։
Տարբերություն enum class-ից՝ sealed դասերը կարող են ունենալ տարբեր տվյալների տիպեր յուրաքանչյուր ենթատեսակի համար (օրինակ՝ Success և Error), մինչդեռ enum class-ի տարրերը ստատիկ են և կարող են ունենալ միայն որոշակի հատկություններ, ընդհանուր բոլորի համար։ sealed դասերը կարող են նաև ունենալ օբյեկտային օրինակներ (Loading)։