Ce face Iterable.firstOrNull
Aceste proprietăți (extensii din dart:core, de la Dart 3.0) sunt variantele sigure ale lui first, last și single. firstOrNull și lastOrNull returnează null pe o colecție goală. singleOrNull returnează null dacă nu există niciun element sau dacă sunt mai multe.
Se combină bine cu where și cu operatorul ??: lista.where(test).firstOrNull ?? 'implicit'.
Ce returnează
Elementul sau null; tipul este E?.
Exemple
Exemplul 1: Fără excepții pe liste goale
void main() {
final comenzi = <String>[];
print(comenzi.firstOrNull);
print(comenzi.lastOrNull ?? 'nicio comandă');
comenzi.addAll(['pizza', 'supă']);
print('${comenzi.firstOrNull}, ${comenzi.lastOrNull}');
print('singleOrNull pe 2 elemente: ${comenzi.singleOrNull}');
}
Rezultat
null
nicio comandă
pizza, supă
singleOrNull pe 2 elemente: null
Exemplul 2: Căutare cu valoare implicită
void main() {
final angajati = {'Ana': 'IT', 'Mihai': 'vânzări', 'Ioana': 'IT'};
String primulDin(String dep) =>
angajati.keys.where((n) => angajati[n] == dep).firstOrNull ?? '(nimeni)';
print('IT: ${primulDin('IT')}');
print('HR: ${primulDin('HR')}');
print('singur în vânzări: ${angajati.keys.where((n) => angajati[n] == 'vânzări').singleOrNull}');
}
Rezultat
IT: Ana
HR: (nimeni)
singur în vânzări: Mihai
Greșeli frecvente
- Folosești
singleOrNullca să afli dacă există un element. Când sunt două sau mai multe returnează totnull, la fel ca la zero.
Comenzi înrudite
Iterable.first: first și last dau primul și ultimul element; single dă singurul element și verifică faptul că este unul singur.Iterable.firstWhere: Găsește primul, ultimul sau singurul element care trece un test, cu o valoare de rezervă opțională (orElse).Iterable.elementAt: Returnează elementul de la o poziție; elementAtOrNull returnează null dacă poziția nu există.Iterable.nonNulls: Elementele care nu sunt null, cu tipul ne-nullabil (din Iterable<T?> obții Iterable<T>).