Obsługa wartości null w Dart (i Flutter) – nauka podstaw programowania

Obsługa wartości null w Dart (i Flutter) – nauka podstaw programowania

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.

Dodaj komentarz