Iterable.take în Dart

take păstrează primele n elemente, skip sare peste primele n elemente.

Sintaxă
Iterable<E> take(int count)
Iterable<E> skip(int count)

Ce face Iterable.take

take(n) returnează un iterable leneș cu cel mult primele n elemente. skip(n) returnează elementele care rămân după primele n. Dacă colecția are mai puține elemente, nu apare nicio eroare: primești câte sunt.

Împreună, skip și take fac paginarea: skip(pagina * marime).take(marime). Pe liste există și sublist, care returnează direct o listă, dar aruncă eroare dacă pozițiile depășesc lungimea.

Parametri

Parametru Descriere
count Numărul de elemente păstrate (take) sau sărite (skip). Nu poate fi negativ.

Ce returnează

Un Iterable leneș.

Exemple

Exemplul 1: Primii trei din clasament

void main() {
  final scoruri = [980, 870, 860, 720, 650, 600];
  print('Podium: ${scoruri.take(3)}');
  print('Restul: ${scoruri.skip(3)}');
  print('take(10) pe 6 elemente: ${scoruri.take(10).length}');
}

Rezultat

Podium: (980, 870, 860)
Restul: (720, 650, 600)
take(10) pe 6 elemente: 6

Exemplul 2: Paginare cu skip și take

void main() {
  final produse = List.generate(7, (i) => 'produs ${i + 1}');
  const marime = 3;
  for (var pagina = 0; pagina * marime < produse.length; pagina++) {
    final bucata = produse.skip(pagina * marime).take(marime);
    print('Pagina ${pagina + 1}: ${bucata.join(', ')}');
  }
}

Rezultat

Pagina 1: produs 1, produs 2, produs 3
Pagina 2: produs 4, produs 5, produs 6
Pagina 3: produs 7

Greșeli frecvente

  • Dai o valoare negativă: take(-1) aruncă RangeError. Verifică valoarea înainte, mai ales când vine din calcule.

Comenzi înrudite

  • Iterable.takeWhile: takeWhile păstrează elementele de la început cât timp trec testul; skipWhile le sare cât timp trec testul.
  • List.sublist: sublist copiază o porțiune a listei într-o listă nouă; getRange dă aceeași porțiune ca iterable leneș.
  • Stream.take: take păstrează doar primele n valori și apoi închide stream-ul; skip sare peste primele n valori.