Iterable.length în Dart

length dă numărul de elemente; isEmpty și isNotEmpty spun dacă colecția este goală.

Sintaxă
int get length
bool get isEmpty
bool get isNotEmpty

Ce face Iterable.length

length returnează câte elemente are colecția. Pe List, Set și Map valoarea este cunoscută imediat. Pe un iterable leneș (rezultatul lui where, de exemplu), length trebuie să parcurgă toate elementele ca să le numere.

isEmpty și isNotEmpty sunt mai clare decât length == 0 și, pe iterabile leneșe, mai rapide: se opresc după primul element.

Ce returnează

Un int (length) sau un bool.

Exemple

Exemplul 1: Numărarea și verificarea colecțiilor

void main() {
  final cos = ['pâine', 'lapte'];
  print('${cos.length} produse');
  print('gol? ${cos.isEmpty}, are ceva? ${cos.isNotEmpty}');

  final scumpe = [12.5, 3.0, 45.9, 7.0].where((p) => p > 10);
  print('${scumpe.length} produse peste 10 lei');

  final mesaje = <String>[];
  print(mesaje.isEmpty ? 'Niciun mesaj nou' : '${mesaje.length} mesaje');
}

Rezultat

2 produse
gol? false, are ceva? true
2 produse peste 10 lei
Niciun mesaj nou

Exemplul 2: Lungimea pe map, set și text

void main() {
  final judete = {'IS': 'Iași', 'CJ': 'Cluj', 'B': 'București'};
  print('${judete.length} județe, ${judete.keys.length} chei');
  final litere = 'mississippi'.split('').toSet();
  print('${litere.length} litere diferite: $litere');
}

Rezultat

3 județe, 3 chei
4 litere diferite: {m, i, s, p}

Greșeli frecvente

  • Apelezi length pe un iterable leneș doar ca să afli dacă are elemente: parcurgi tot. Folosește isNotEmpty.

Comenzi înrudite

  • List.length: Numărul de elemente al listei; pe listele extensibile se poate și seta, pentru a tăia sau lungi lista.
  • Map: Colecție de perechi cheie–valoare: cauți rapid o valoare după cheia ei (nume, cod, oraș).
  • Iterable.first: first și last dau primul și ultimul element; single dă singurul element și verifică faptul că este unul singur.
  • Stream.length: length numără valorile până la închiderea stream-ului; isEmpty spune dacă stream-ul nu are nicio valoare.