Kotlin Ternary Conditional Operator

1. Ikhtisar

Singkatnya, tidak ada operator terner di Kotlin . Namun, menggunakan ekspresi if dan when membantu mengisi celah ini.

Dalam tutorial ini, kita akan melihat beberapa cara berbeda untuk meniru operator terner.

2. jika dan kapan Ekspresi

Tidak seperti bahasa lain, if dan when di Kotlin adalah ekspresi. Hasil dari ekspresi seperti itu dapat dimasukkan ke dalam variabel .

Dengan menggunakan fakta ini, if dan when dapat menggantikan operator terner dengan caranya sendiri.

2.1. Menggunakan if-else

Mari kita lihat penggunaan ekspresi if untuk meniru operator terner:

val result = if (a) "yes" else "no"

Dalam ekspresi di atas, jika a disetel ke true , variabel hasil kami disetel ke ya . Jika tidak, ini disetel ke no .

Perlu dicatat bahwa jenis hasil bergantung pada ekspresi di sisi kanan . Secara umum, tipenya adalah Any . Misalnya, jika sisi kanan memiliki tipe Boolean , hasilnya juga akan menjadi Boolean :

val result: Boolean = if (a == b) true else false

2.2. Menggunakan saat

Kita juga bisa menggunakan ekspresi when untuk membuat operator pseudo-ternary:

val result = when(a) {   true -> "yes"   false -> "no" }

Kode ini sederhana, lugas, dan mudah dibaca. Jika suatu adalah benar , menetapkan hasil menjadi ya . Jika tidak, tetapkan ke no .

2.3. Operator Elvis

Terkadang, kami menggunakan ekspresi if untuk mengekstrak beberapa nilai saat nilainya bukan null atau mengembalikan nilai default saat nilainya null :

val a: String? = null val result = if (a != null) a else "Default"

Ini juga memungkinkan untuk melakukan hal yang sama dengan ekspresi when :

val result = when(a) { null -> "Default" else -> a }

Karena ini adalah pola yang umum, Kotlin memiliki operator khusus untuk itu:

val result = a ?: "Default"

The : dikenal sebagai operator Elvis. Ia mengembalikan operan jika bukan null . Jika tidak, ini akan mengembalikan nilai default yang ditentukan di sebelah kanan operator ? : .

2.4. DSL

Pasti ada godaan untuk membuat DSL yang meniru operator terner. Namun, batasan bahasa Kotlin terlalu ketat untuk memungkinkan reproduksi 100% sintaks terner tradisional.

Karena itu, mari hindari godaan ini dan cukup gunakan salah satu solusi yang disebutkan sebelumnya.

3. Kesimpulan

Meskipun Kotlin tidak memiliki operator terner, ada beberapa alternatif yang dapat kita gunakan - jika dan kapan . Mereka bukan gula sintaksis, tetapi ekspresi lengkap, seperti yang telah kita lihat sebelumnya.

Seperti biasa, kode tersedia di GitHub.