Iterable.nonNulls în Dart

Elementele care nu sunt null, cu tipul ne-nullabil (din Iterable<T?> obții Iterable<T>).

Sintaxă
Iterable<T> get nonNulls   // pe Iterable<T?>

Ce face Iterable.nonNulls

nonNulls (Dart 3.0) există pe iterabile cu elemente nullabile, Iterable<T?>. Returnează un iterable leneș fără valorile null, iar tipul lui este Iterable<T>, deci poți folosi elementele fără !.

Un where((x) => x != null) ar elimina și el valorile null, dar tipul ar rămâne Iterable<T?>.

Ce returnează

Un Iterable<T> leneș.

Exemple

Exemplul 1: Note lipsă dintr-un catalog

void main() {
  final note = <int?>[9, null, 7, 10, null];
  final existente = note.nonNulls;
  print(existente);
  final medie = existente.reduce((a, b) => a + b) / existente.length;
  print('media: ${medie.toStringAsFixed(2)} din ${existente.length} note');
}

Rezultat

(9, 7, 10)
media: 8.67 din 3 note

Exemplul 2: Conversii care pot eșua

void main() {
  final intrari = ['12', 'abc', '7', '', '30'];
  final numere = intrari.map(int.tryParse).nonNulls.toList();
  print(numere);
}

Rezultat

[12, 7, 30]

Greșeli frecvente

  • Cauți nonNulls pe o listă de tip ne-nullabil (List<int>): nu există acolo, pentru că nu are ce elimina.

Comenzi înrudite

  • Iterable.where: Păstrează doar elementele care trec un test; whereType păstrează doar elementele de un anumit tip.
  • Iterable.firstOrNull: Primul, ultimul sau singurul element, ori null în loc de excepție când nu există.
  • Iterable.map: Transformă fiecare element cu o funcție și returnează un iterable nou, leneș, cu rezultatele.