Sobes.tech
Middle

Kotlin-ში მონაცემთა კლასები და sealed კლასები რა მიზნით გამოიყენება?

sobes.tech AI

პასუხი AI-სგან

Data-კლასები ამარტივებს მხოლოდ მონაცემების შენახვისთვის განკუთვნილი კლასების შექმნას. კომპილატორი ავტომატურად ქმნის მათთვის:

  • equals()
  • hashCode()
  • toString()
  • copy()
  • componentN() დესტრუქტურიზაციისთვის
data class User(val name: String, val age: Int)

// გამოყენება
val user = User("Alice", 30)
println(user) // აჩვენებს User(name=Alice, age=30)
val user2 = user.copy(age = 31)
val (name, age) = user // დესტრუქტურიზაცია

Sealed-კლასები წარმოადგენს შეზღუდულ კლასთა ჰიერქიას, სადაც ყველა შესაძლო ქვკლასი ცნობილია კომპილაციის დროს. ეს საშუალებას აძლევს გამოიყენოთ ისინი when გამოთქმებში else ბლოკის გარეშე, რაც უზრუნველყოფს ყველა შესაძლო ვარიანტის სრული შემოწმებას.

sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val message: String) : Result()
    object Loading : Result() // ობიექტი, რადგან პარამეტრები არ აქვს
}

fun handleResult(result: Result) {
    when (result) {
        is Result.Success -> println("წარმატება: ${result.data}")
        is Result.Error -> println("შეცდომა: ${result.message}")
        Result.Loading -> println("იტვირთება...")
    }
}

შედარება:

ნიშნული Data-კლასი Sealed-კლასი
დანიშნულება მონაცემების შენახვა შეზღუდული ჰიერქია კლასების
შესაძლებლობები ავტომატური მეთოდების გენერაცია სრული შემოწმება when-ში
ქვკლასები სპეციფიკური შეზღუდვა არაა უნდა იყოს განსაზღვრული იმავე ფაილში ან მოდულში
გამოყენება მონაცემთა მოდელები, DTO-ები მდგომარეობების, მოვლენების, ვარიანტების წარმოდგენა