Kotlin Enum class
created by I.Ma'rufjonUshbu 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