Sobes.tech
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