Sobes.tech
Middle

Kotlin'da Enum sinflari bilan ishlashning xususiyatlari qanday?

sobes.tech AI

AIdan javob

Enum sinfi — bu maxsus turdagi sinf bo‘lib, konstantalar to‘plamini ifodalash uchun ishlatiladi.

Xususiyatlar:

  • Konstantalarni aniqlash: Har bir enum konstantasi enum sinfining nusxasidir.
    enum class Color {
        RED, GREEN, BLUE
    }
    
  • Xususiyatlar va metodlar: Enum sinflar xususiyatlar va metodlarga ega bo‘lishi mumkin. Har bir konstantalar ularni turlicha amalga oshirishi mumkin.
    enum class Status(val description: String) {
        SUCCESS("Muvaffaqiyatli bajarildi"),
        ERROR("Xato yuz berdi"),
        PENDING("Kutmoqda")
    }
    
    enum class Direction {
        NORTH, SOUTH, EAST, WEST;
    
        fun getOpposite(): Direction {
            return when (this) {
                NORTH -> SOUTH
                SOUTH -> NORTH
                EAST -> WEST
                WEST -> EAST
            }
        }
    }
    
  • Noma’lum sinflar: Har bir enum konstantasi, metodlar yoki xususiyatlar uchun o‘z amalga oshirishlarini taqdim etadigan noma’lum sinf bilan e’lon qilinishi mumkin.
    enum class State {
        IDLE {
            override fun signal() = READY
        },
        READY {
            override fun signal() = IDLE
        }; // Nuqta va vergul sinf a’zolarini e’lon qilishdan oldin majburiy
    
        abstract fun signal(): State
    }
    
  • Interfeyslarni amalga oshirish: Enum sinf interfeýslarni amalga oshirishi mumkin.
    interface Printable {
        fun printName()
    }
    
    enum class Shape : Printable {
        CIRCLE {
            override fun printName() {
                println("Doira")
            }
        },
        SQUARE {
            override fun printName() {
                println("To‘rtburchak")
            }
        }
    }
    
  • O‘rnatilgan xususiyatlar: Har bir konstantada o‘rnatilgan name (konstantaning nomi satr sifatida) va ordinal (e’lon qilingan joyi, 0 dan boshlanadi) mavjud.
    enum class Priority {
        LOW, MEDIUM, HIGH
    }
    
    fun main() {
        println(Priority.MEDIUM.name)    // Chiqish: MEDIUM
        println(Priority.HIGH.ordinal) // Chiqish: 2
    }
    
  • O‘rnatilgan funksiyalar:
    • enumValues<T>(): Enum sinfidagi barcha konstantalarni o‘z ichiga olgan massivni qaytaradi.
    • enumValueOf<T>(name: String): Berilgan nom bilan enum konstantasini qaytaradi. Agar topilmasa, IllegalArgumentException chiqaradi.
    fun main() {
        val allPriorities = enumValues<Priority>()
        println(allPriorities.joinToString()) // Chiqish: LOW, MEDIUM, HIGH
    
        val highPriority = enumValueOf<Priority>("HIGH")
        println(highPriority) // Chiqish: HIGH
    }
    
  • when ifodasida foydalanish: when uchun ideal. Kompilyator, agar barcha shoxlar qamrab olinmagan bo‘lsa, ogohlantiradi (qaytariladigan ifoda sifatida foydalanilganda).
    fun processStatus(status: Status) {
        when (status) {
            Status.SUCCESS -> println("Muvaffaqiyat")
            Status.ERROR -> println("Xato")
            Status.PENDING -> println("Kutmoqda")
        }
    }
    

Kotlin'dagi enumlar, Java'dagilarga nisbatan yanada kuchliroq bo‘lib, xususiyatlar, metodlar qo‘shish va interfeyslarni amalga oshirish imkonini beradi.