Kotlin Enum class

Kotlin Enum class

created by I.Ma'rufjon
Kotlin Enum class

Ushbu maqolada biz kotlin enum classlari haqida bilib olamiz. Biz misollar yordamida kotlinda enum classlarni yaratish va ulardan foydalanishni o'rganamiz. Men kotlin enum class haqida kotlin rasmiy saytidan o'rgandim va bularni sizlar bilan bo'lishmoqchiman. Enumlarga dasturda konstanta qiymatlardan foydalanishni qulay va samarali usuli sifatida qarashimiz mumkin.

Masalan biz quyidagi Size enum classda foydalansak, butun dasturimiz davomida biz beixtiyor 5- o'lcham ishlatib qo'ymaymiz.

enum Size {

   SMALL, MEDIUM, LARGE, EXTRALARGE 
}

Dasturlashda ba'zan ma'lum bir qiymatlarga ega bo'lish uchun tipga ehtiyoj bor. Buni amalga oshirish uchun raqamlash kontseptsiyasi kiritilgan. Enumatsiya - bu nomlangan kostantalarning ro'yxati. Kotlinda boshqa ko'plab dasturlash tillari singari, enumning o'ziga xos property va funksiyalari bor. Java enumlaridan farqli o'laroq, Kotlin enumlari classlardir.

Kotlindagi enum classlari haqida ba'zi muhim fikrlar:

1) Enum konstantalari shunchaki to'plamlar emas, ularning property va funksiyalari mavjud.

2) Har bir enum konstantasi classning alohida obyekti sifatida ishlaydi va o'zaro vergul bilan ajratiladi.

3) Enumlarda oldindan aniqlangan nomlarni konstantalarimizga berish orqali kodimizdan foydalanish effektivligimizni oshiramiz.

4) Enum class obyektini konstuktor orqali yaratib bo'lmaydi, ya'ni enum obyekti oddiy obyektlar kabi olinmaydi

Initializing enums link

fun main(args: Array<String>) {
    println(Car.BMW)
    println(Car.FERRARI)
    println(Car.BUGATTI)
}

enum class Car {
    FERRARI,
    BUGATTI,
    BMW
}

Natija :

BMW

FERRARI

BUGATTI

fun main(args: Array<String>) {
    println(Car.BMW.color)
    println(Car.FERRARI.color)
    println(Car.BUGATTI.color)
}

enum class Car(val color : String){
    FERRARI("black"),
    BUGATTI("white"),
    BMW("black")
}

Natija :

black

black

white

Konstantalarni nomlash link

Konstantalar nomlashda tavsiya qilinadi hammasini katta harflarda yozishni va konstanta nomi ikkita so'z bilan ifodalansa ular orasiga "_" qo'yish tavsiya qilinadi " " probel qo'yilsa xato beradi, doimiylar hammasi e'lon qilingandan keyin ";" qo'yiladi.

Masalan:

enum class Car{
    //bu kabi ishlatsa boladi lekin tavsiya qilinmaydi
    Ferrari_Black,
    // Bu syntaxsis jihatdan xato
    BUGATTI Black,
    BMW
}


Property:

1) Ordinal - Bu property konstantalar tartibini saqlaydi, odatda indekslash null dan boshlanadi

2) Name- bu property konstanta nomini saqlaydi.

1) Misol: link

fun main(args: Array<String>) {
    println("name = ${Car.FERRARI.name} and ordinal = ${Car.FERRARI.ordinal}")
    println("name = ${Car.BUGATTI.name} and ordinal = ${Car.BUGATTI.ordinal}")
}

enum class Car{
    FERRARI(),
    BUGATTI(),
    BMW()
}

Natija:

name = FERRARI and ordinal = 0

name = BUGATTI and ordinal = 1

2)Misol

enum class Car(val name : String){
    FERRARI("ferrari"),
    BUGATTI("bugatti"),
    BMW("BMW");
}

Methodlari:

1) values - ushbu method enum classda aniqlangan barcha konstantalar listni qaytaradi. link

fun main(args: Array<String>) {
    for (car in Car.values()){
        println(car.name)
    }
}

enum class Car{
    FERRARI(),
    BUGATTI(),
    BMW()
}

Natija:

FERRARI

BUGATTI

BMW

2) valueOf - bu method belgilangan doimiyni qaytaradi. Agar topilmasa IllegalArgumentException beradi.

Enum class propertylaridan biri bu konstantalar uchun default qiymat berish, agar bu berilmasa har bir konstanta uchun alohida qiymat berish kerak.

Misol:

fun main(args: Array<String>) {
    for (car in Car.values()){
        println("${car.name} = ${car.color}")
    }

    val car1 = Car.FERRARI
    val car2 = Car.BUGATTI
    println("my car = ${Car.isMyCar(car1)}")
    println("my car = ${Car.isMyCar(car2)}")
}

enum class Car(val color  : String = "white"){
    FERRARI("black"),
    BUGATTI,
    BMW;

    companion object {
        fun isMyCar(car : Car) : Boolean  = car.color == "black"
    }
}

Bu yerda Car enum class uning color degan maydoniga default qiymat berilgan.

Natija:

FERRARI = black

BUGATTI = white

BMW = white

my car = true

my car = false


Enum class tarkibida abstract funksiyalar .

fun main(args: Array<String>) {
    val car1 = Car.FERRARI
    val car2 = Car.BUGATTI

    println(car1.aboutCar())
    println(car2.aboutCar())
}

enum class Car(val color  : String){
    FERRARI("black"){
        override fun aboutCar() = "it's a $color car"
    },
    BUGATTI("white") {
        override fun aboutCar() = "it's a $color car"
    },
    BMW("white") {
        override fun aboutCar() = "it's a $color car"
    };

    abstract fun aboutCar() : String
}

Natija:

it's a black car

it's a white car

when bilan enum class ifodalanishi.

fun main(args: Array<String>) {
    val car = Car.FERRARI
    when(car){
        Car.FERRARI -> println("It's car ferrari")
        Car.BUGATTI -> println("It's car bugatti")
        Car.BMW -> println("It's car BMW")
        // else ham hisobga olishkerak kerak aks holda ogohlantirish chiqishi mumkin
    }
}

enum class Car{
    FERRARI,
    BUGATTI,
    BMW
}

Enum classlar uchun Interfeys implement qilish.

fun main(args: Array<String>) {
    val car = Car.FERRARI
    println(car.info())
}

enum class Car : Information {
    FERRARI{
        override fun info(): String = "It's car ferrari"
    },
    BUGATTI {
        override fun info(): String = "It's car bugatti"
    },
    BMW {
        override fun info(): String = "It's car BMW"
    };
}

interface Information {
    fun info() : String
}
Natija:
It's car ferrari

2- usul

fun main(args: Array<String>) {
    val car = Car.FERRARI
    println(car.info())
    println(car.infoCar())
}

enum class Car : Information {
    FERRARI{
        override fun info(): String = "It's car ferrari"
    },
    BUGATTI {
        override fun info(): String = "It's car bugatti"
    },
    BMW {
        override fun info(): String = "It's car BMW"
    };

    fun infoCar() = info()
}

interface Information {
    fun info() : String
}
 

Natija:

It's car ferrari

It's car ferrari

Xulosa sifatida shuni aytishim mumkinki Enum classlardan foydalanib biz dasturimiz kodida tushunarlilik effectini oshiramiz, jamoa bo'lib ishlashda ham bir-birimizni tushunish osonlashtiramiz. Hozircha shular do'stlar, to'liq kodlarni quyidagi linkdan ko'rishinggiz mumkin. Maqolada bo'lgan kamchiliklar va xatolar uchun uzur so'rayman va ular haqida gruppamizda xabar bersanggiz xursand bo'lardim. E'tiboringgiz uchun rahmat.

Kanalimmizdan uzoqlashmang!
Rasmiy saytimmiz: Dasturlash.net

Report Page