Jeśli wolisz formę video, zapraszam na YT: https://youtu.be/QR8RO3EUqSk
Handle null like a boss!
Wartości null potrafią sprawić spory problem i to nie tylko w języku Dart. W wielu przypadkach użycie zmiennej z wartością null powoduje crash aplikacji, na co nie można sobie pozwolić.
Na szczęście istnieją sposoby ułatwiające programiście obsługę wartości null.
??
Napiszmy niedziałający kod.
void main(List arguments) { int x; int y = x * 2; print(y); }
Po odpaleniu można zobaczyć błąd. x jest równe null, więc nie można pomnożyć tego x przez 2. Możemy przy użyciu zmiennej podać wartość, która zostanie użyta zamiast zmiennej w przypadku wystąpienia null. Robi się to przy użyciu dwóch znaków zapytania, które umieszcza się obok zmiennej, którą chcemy zabezpieczyć.
int y = (x ?? 3) * 2;
Teraz wszystko działa. x jest równe null, więc została użyta trójka, którą mnożymy razy dwa.
Ustawmy jeszcze x na, na przykład 5, aby upewnić się, że y będzie miało w tym przypadku wartość 10.
void main(List arguments) { int x = 5; int y = (x ?? 3) * 2; print(y); }
Myślę, że to jest jasne, pora na kolejny przykładzik.
?
void main(List arguments) { int x; bool isEven = x.isEven; print(isEven); }
isEven pozwala nam sprawdzić czy liczba jest parzysta. Odpal kod i… błąd. isEven został wywołany na zmiennej o wartości null. Zabezpieczeniem tym razem jest pojedynczy znak zapytania użyty po nazwie obiektu, ale przed wywołaniem jakieś metody:
bool isEven = x?.isEven;
isEven jest równe null w tym przypadku. Znak zapytania działa tu w taki sposób, że po wykryciu null, zwracany jest null natychmiast i program nie wywołuje dalszych działań po kropce, a tym samym błąd nie wystąpi. Można ten przykład połączyć z poprzednim:
bool isEven = x?.isEven ?? true;
Dzięki temu zabezpieczamy się przed błędem oraz zamiast zwracania null, zwracamy konkretną wartość.
??=
Ostatnią rzeczą, którą chcę Ci w tej lekcji pokazać, jest proste przypisanie wartości do zmiennej, jeśli ta zmienna wynosi null. Zacznę od kodu, który już znasz.
void main(List arguments) { int x; if (x == null) { x = 5; } print(x); }
Jeśli x ma wartość null, to przypisz do x 5. Banał. Spójrz, jak można to skrócić.
void main(List arguments) { int x; x ??= 5; print(x); }
Działa to na takiej samej zasadzie, co przed chwilą napisana instrukcja if. Jeśli x jest równe null, to przypisz do x 5.