Sobes.tech
Middle

պատմիր ինձ տվյալների դասերի և սելյադ դասերի մասին Kotlin-ում։

sobes.tech AI

Պատասխան AI-ից

Kotlin-ի տվյալների դասերը օգտագործվում են տվյալների պահպանման համար: Նրանք ավտոմատ կերպով ստեղծում են օգտակար մեթոդներ, ինչպիսիք են equals(), hashCode(), toString(), copy(), ինչպես նաև դեկստրակտորացման կոմպոնենտներ:

// Տվյալների դասի օրինակ
data class User(val name: String, val age: Int)

Seal դասերը օգտագործվում են սահմանափակված դասերի ժառանգության ներկայացման համար: Բոլոր ենթակլասները պետք է սահմանվեն նույն ֆայլում, ինչ seal դասը (Kotlin 1.5+-ում այս սահմանափակումը մեղմացվել է): Սա թույլ է տալիս կոմպիլատորին ապահովել ենթակլասների լրիվ ընդգրկում, օրինակ, when արտահայտությունում:

// Seal դասի օրինակ
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val message: String) : Result()
    object Loading : Result()
}

// Seal դասի օգտագործման օրինակ `when` արտահայտությունում
fun processResult(result: Result) {
    when (result) {
        is Result.Success -> println("Հաջողություն: ${result.data}")
        is Result.Error -> println("Սխալ: ${result.message}")
        Result.Loading -> println("Բեռնվում...")
    }
}

Հիմնական տարբերությունները՝

  • Մշակել՝ տվյալների դասերը՝ տվյալների պահպանում, seal դասերը՝ դասերի ժառանգության սահմանափակում:
  • Գեներացվող մեթոդներ՝ տվյալների դասերը գեներացնում են ստանդարտ մեթոդներ տվյալների համար, seal դասերը՝ ոչ:
  • Զբաղվածության սահմանափակում՝ seal դասերը սահմանափակումներ են դնում ենթակլասների հայտարարության վրա, տվյալների դասերը՝ ոչ:
  • when-ում լրիվության ստուգում՝ Kotlin-կոմպիլատորը կարող է ստուգել seal դասի ենթակլասների լրիվությունը when-ում առանց else բլոկի:

Երկուսն էլ՝ seal և տվյալների դասերը, կարող են լինել աբստրակտ, սակայն տվյալների դասերը չեն կարող լինել open (քանի որ դրանք ըստ նախնական կարգի final են) և չեն կարող անմիջապես իրականացնել open մեթոդներ (միայն ինտերֆեյսների կամ աբստրակտ դասերի միջոցով): Seal դասերը, ըստ նախնական կարգի, աբստրակտ են, և դրանց կոնստրուկտորները մասնավոր են: