Jika saya memiliki nullable Boolean b
, saya dapat melakukan perbandingan berikut di Java:
Boolean b = ...;
if (b != null && b) {
/* Do something */
} else {
/* Do something else */
}
Di Kotlin, saya bisa mencapai hal yang sama dengan menggunakan !!
operator:
val b: Boolean? = ...
if (b != null && b!!) {
/* Do something */
} else {
/* Do something else */
}
Namun, penggunaan dari !!
terasa agak samar bagi saya, menghindari sistem keamanan nol.
Apakah ada pendekatan yang lebih elegan untuk ini?
Sunting Sepertinya saya agak terlalu rumit. Untuk variabel lokal, seperti yang ditunjukkan Banthar , itu berhasil. Namun, Boolean saya b
sebenarnya adalah "properti dengan bidang dukungan" (saya belum benar-benar memahami apa yang diberlakukan ini). Inilah hasilnya:
!!b
dan tidak sekadarb
? (Saya tidak begitu akrab dengan kotlin, hanya keingintahuan)b
maynull
dan salah satu fitur Kotlin adalah Null Safety , yang memberikan kesalahan kompilasi saat mencoba mengevaluasi referensi nullable. Jadi, menggunakan polosb
memberikan kesalahan kompilasi :)b != nil
mengerti sebelum memeriksa sisi kanan?val r = b?doSomething() ?: doSomethingElse()
harus bekerja.Jawaban:
Anda dapat membandingkan boolean nullable dengan
true
,false
ataunull
menggunakan operator persamaan:sumber
!
true
,false
ataunull
. Kemudian ketika melakukanif (b != true)
Anda hanya tahu bahwa b itu tidak benar, tetapi Anda tidak tahu apa-apa tentangfalse
ataunull
if (b != true) // b is null or false
eg3.if (b == false) // b is false
Jika Anda ingin memeriksa dengan rapi apakah
Boolean?
adalahtrue
ataufalse
Anda dapat melakukan:Jika Anda ingin memeriksa apakah
null
Anda dapat menambahkannya (atauelse
) sebagai nilai diwhen
:sumber
Kotlin akan menganalisis pemeriksaan null Anda secara statis. Ini bagus:
Meskipun ini gagal dengan kesalahan tipe:
Untuk lebih lanjut lihat: http://kotlinlang.org/docs/reference/null-safety.html
Anda juga dapat menggunakan "operator penggabungan nol" (yang akan berfungsi untuk variabel yang bisa berubah):
sumber
var
?) ... jika itu lokalvar
maka kompiler masih dapat mengizinkan cast yang aman. Untuk kasus yang lebih khusus, baca stackoverflow.com/questions/34498562/…val booleanVal = nullableProducer?.produceVal() ?: false; if (booleanVal) {}
Dari apa yang saya lihat Boolean? adalah hasil dari metode yang mengembalikan Boolean pada objek yang nullable
Solusi yang saya gunakan adalah menggunakan
let
fungsi untuk menghapus kemungkinan nilai null yang dikembalikan seperti itusumber
if
blok denganperson?.isHome() == true
.Di Kotlin, Anda dapat melakukan seperti ini:
sumber
b != null && b == true
sama denganb == true
.pertama, tambahkan fungsi sebaris kustom di bawah ini:
maka Anda dapat menulis kode seperti ini:
sumber
Untuk Kotlin yang biasa saya gunakan adalah
ini hanya akan bekerja jika propertinya benar dan objeknya bukan null. Untuk kebalikannya:
sumber
Mari kita gunakan
if-else
pernyataan denganElvis Operator
:sumber
Sangat mudah untuk menambahkan fungsi ekstensi jika itu membantu Anda.
sumber
sumber
Anda dapat melakukannya dengan Operator yang aman "biarkan"
sumber