Jeśli mam wartość null Boolean b
, mogę wykonać następujące porównanie w Javie:
Boolean b = ...;
if (b != null && b) {
/* Do something */
} else {
/* Do something else */
}
W Kotlinie to samo mogę osiągnąć za pomocą !!
operatora:
val b: Boolean? = ...
if (b != null && b!!) {
/* Do something */
} else {
/* Do something else */
}
Jednak użycie !!
jest dla mnie trochę szkicowe, omijając zerowy system bezpieczeństwa.
Czy jest na to bardziej eleganckie podejście?
Edycja Wygląda na to, że trochę przesadziłem. W przypadku zmiennych lokalnych, jak pokazuje Banthar , działa. Jednak moja wartość logiczna b
jest w rzeczywistości „właściwością z polem zapasowym” (nie jestem jeszcze na bieżąco z tym, co to narzuca). Oto wynik:
!!b
a nie po prostub
? (Nie jestem zbyt zaznajomiony z kotlinem, tylko ciekawostki)b
może być,null
a jedną z funkcji Kotlina jest Null Safety , która daje błędy kompilacji podczas próby oceny referencji dopuszczających wartość null. Tak więc użycie zwykłegob
daje błąd kompilacji :)b != nil
złapiesz tego przed sprawdzeniem prawej strony?val r = b?doSomething() ?: doSomethingElse()
powinno działać.Odpowiedzi:
Można porównać zerowalne logiczną z
true
,false
lubnull
za pomocą operatora równości:źródło
!
true
,false
lubnull
. Wtedy, robiącif (b != true)
, wiesz tylko, że b nie jest prawdą, ale nic nie wiesz ofalse
lubnull
if (b != true) // b is null or false
eg3.if (b == false) // b is false
Jeśli chcesz dokładnie sprawdzić, czy
Boolean?
jesttrue
lubfalse
możesz:Jeśli chcesz sprawdzić, czy tak jest
null
, możesz dodać to (lubelse
) jako wartość wwhen
:źródło
Kotlin będzie analizować statycznie twoje czeki zerowe. Jest okej:
Mimo że to się nie powiedzie z błędem typu:
Więcej na: http://kotlinlang.org/docs/reference/null-safety.html
Możesz także użyć „operatora łączenia wartości null” (który będzie działał dla zmiennych zmiennych):
źródło
var
?) ... jeśli jest to plik lokalny,var
kompilator nadal może zezwolić na bezpieczne rzutowanie. Więcej informacji na temat specjalnych przypadków można znaleźć na stronie stackoverflow.com/questions/34498562/ ...val booleanVal = nullableProducer?.produceVal() ?: false; if (booleanVal) {}
Z tego co widziałem Boolean? jest wynikiem metody, która zwraca wartość logiczną dla obiektu, który ma wartość null
Rozwiązaniem, którego używałem, jest użycie
let
funkcji do usunięcia możliwej zwróconej wartości null w ten sposóbźródło
if
blok przezperson?.isHome() == true
.W Kotlinie możesz zrobić tak:
źródło
b != null && b == true
jest taki sam jakb == true
.najpierw dodaj niestandardową funkcję wbudowaną poniżej:
możesz napisać taki kod:
źródło
Dla Kotlina zwykle używam
działałoby to tylko wtedy, gdy właściwość ma wartość true, a obiekt nie jest pusty. Na odwrót:
źródło
Użyjmy
if-else
instrukcji zElvis Operator
:źródło
Dodanie funkcji rozszerzenia jest dość łatwe, jeśli ci to pomoże.
źródło
źródło
Możesz to zrobić z bezpiecznym operatorem „pozwól”
źródło