Bekerja dengan Enum di Kotlin

1. Ikhtisar

Dalam tutorial ini, kita akan mendalami enum Kotlin.

Dengan evolusi bahasa pemrograman, penggunaan dan penerapan enum juga semakin maju.

Konstanta enum saat ini bukan hanya kumpulan konstanta - mereka dapat memiliki properti, mengimplementasikan antarmuka, dan banyak lagi.

Untuk pemula Kotlin, lihat artikel ini tentang dasar-dasar Kotlin - Pengantar Bahasa Kotlin.

2. Enum Kotlin Dasar

Mari kita lihat dasar-dasar enum di Kotlin.

2.1. Mendefinisikan Enums

Mari kita definisikan enum sebagai memiliki tiga konstanta yang menggambarkan jenis kartu kredit:

enum class CardType { SILVER, GOLD, PLATINUM }

2.2. Menginisialisasi Konstanta Enum

Enum di Kotlin, seperti di Java, dapat memiliki konstruktor. Karena konstanta enum adalah turunan dari kelas Enum , konstanta dapat diinisialisasi dengan meneruskan nilai tertentu ke konstruktor.

Mari tentukan nilai warna untuk berbagai jenis kartu:

enum class CardType(val color: String) { SILVER("gray"), GOLD("yellow"), PLATINUM("black") }

Kita dapat mengakses nilai warna dari jenis kartu tertentu dengan:

val color = CardType.SILVER.color

3. Konstanta Enum sebagai Kelas Anonim

Kita dapat mendefinisikan perilaku konstanta enum tertentu dengan membuatnya sebagai kelas anonim. Konstanta kemudian perlu menggantikan fungsi abstrak yang didefinisikan dalam definisi Enum .

Misalnya, untuk setiap jenis kartu, kami mungkin memiliki penghitungan uang kembali yang berbeda.

Mari kita lihat bagaimana kita bisa menerapkannya:

enum class CardType { SILVER { override fun calculateCashbackPercent() = 0.25f }, GOLD { override fun calculateCashbackPercent() = 0.5f }, PLATINUM { override fun calculateCashbackPercent() = 0.75f }; abstract fun calculateCashbackPercent(): Float }

Kita bisa memanggil metode yang diganti dari kelas konstan anonim dengan:

val cashbackPercent = CardType.SILVER.calculateCashbackPercent()

4. Enums Menerapkan Antarmuka

Katakanlah ada antarmuka ICardLimit yang mendefinisikan batas kartu dari berbagai jenis kartu:

interface ICardLimit { fun getCreditLimit(): Int }

Sekarang, mari kita lihat bagaimana enum kita dapat mengimplementasikan antarmuka ini:

enum class CardType : ICardLimit { SILVER { override fun getCreditLimit() = 100000 }, GOLD { override fun getCreditLimit() = 200000 }, PLATINUM { override fun getCreditLimit() = 300000 } }

Untuk mengakses batas kredit suatu jenis kartu, kita dapat menggunakan pendekatan yang sama seperti pada contoh sebelumnya:

val creditLimit = CardType.PLATINUM.getCreditLimit()

5. Konstruksi Enum Umum

5.1. Mendapatkan Konstanta Enum berdasarkan Nama

Untuk mendapatkan konstanta enum dengan nama String -nya , kami menggunakan fungsi statis valueOf () :

val cardType = CardType.valueOf(name.toUpperCase())

5.2. Iterasi Melalui Konstanta Enum

Untuk melakukan iterasi melalui semua konstanta enum, kami menggunakan fungsi statis values ​​() :

for (cardType in CardType.values()) { println(cardType.color) }

5.3. Metode Statis

Untuk menambahkan fungsi "statis" ke enum, kita bisa menggunakan objek pendamping :

companion object { fun getCardTypeByName(name: String) = valueOf(name.toUpperCase()) }

Sekarang kita dapat menjalankan fungsi ini dengan:

val cardType = CardType.getCardTypeByName("SILVER")

Perhatikan bahwa Kotlin tidak memiliki konsep metode statis . Apa yang kami tunjukkan di sini adalah cara untuk mendapatkan fungsionalitas yang sama seperti di Java, tetapi menggunakan fitur Kotlin.

6. Kesimpulan

Artikel ini memperkenalkan pengantar enum dalam bahasa Kotlin dan fitur utamanya.

Kami telah memperkenalkan beberapa konsep sederhana seperti mendefinisikan enum dan menginisialisasi konstanta. Kami juga telah menunjukkan beberapa fitur lanjutan seperti mendefinisikan konstanta enum sebagai kelas anonim, dan enum yang mengimplementasikan antarmuka.

Penerapan semua contoh dan cuplikan kode ini dapat ditemukan di proyek GitHub. Ini adalah proyek Maven, jadi semestinya mudah untuk mengimpor dan menjalankannya apa adanya.