Introducció
En Dart, un iterable és una col·lecció d'elements que es poden recórrer un per un. Els iterables són fonamentals per treballar amb col·leccions de dades, ja que permeten accedir i manipular elements de manera seqüencial. En aquest tema, aprendrem què són els iterables, com utilitzar-los i com crear els nostres propis iterables personalitzats.
Conceptes Clau
- Iterable: Una col·lecció que es pot recórrer.
- Iterator: Un objecte que permet recórrer els elements d'un iterable.
- for-in loop: Una estructura de control que permet recórrer iterables de manera senzilla.
Utilització d'Iterables
Iterables Predefinits
Dart proporciona diverses col·leccions que implementen la interfície Iterable
, com ara List
, Set
i Map
. Aquests iterables es poden recórrer utilitzant un bucle for-in
.
La Interfície Iterable
La interfície Iterable
defineix un mètode iterator
que retorna un objecte de tipus Iterator
. Aquest objecte té dos mètodes principals:
moveNext()
: Mou el cursor al següent element i retornatrue
si hi ha un element disponible.current
: Retorna l'element actual.
void main() { List<int> numbers = [1, 2, 3, 4, 5]; Iterator<int> iterator = numbers.iterator; while (iterator.moveNext()) { print(iterator.current); } }
Creació d'Iterables Personalitzats
Podem crear els nostres propis iterables implementant la interfície Iterable
i proporcionant un Iterator
personalitzat.
Exemple: Iterable Personalitzat
class RangeIterable implements Iterable<int> { final int start; final int end; RangeIterable(this.start, this.end); @override Iterator<int> get iterator => RangeIterator(start, end); } class RangeIterator implements Iterator<int> { int current; final int end; bool _firstMove = true; RangeIterator(int start, this.end) : current = start - 1; @override bool moveNext() { if (_firstMove) { _firstMove = false; current++; } else { current++; } return current < end; } } void main() { RangeIterable range = RangeIterable(1, 5); for (int number in range) { print(number); } }
Explicació del Codi
- RangeIterable: Implementa la interfície
Iterable
i defineix els límits de l'interval (start
iend
). - RangeIterator: Implementa la interfície
Iterator
i gestiona el recorregut dels elements dins de l'interval. - moveNext(): Mou el cursor al següent element i retorna
true
si hi ha més elements dins de l'interval. - current: Retorna l'element actual.
Exercicis Pràctics
Exercici 1: Recórrer una Llista
Escriu un programa que recorri una llista de noms i imprimeixi cada nom en una línia nova.
void main() { List<String> names = ['Anna', 'Bernat', 'Carla', 'David']; // Solució for (String name in names) { print(name); } }
Exercici 2: Crear un Iterable Personalitzat
Crea un iterable personalitzat que generi els nombres parells dins d'un interval donat.
class EvenNumbersIterable implements Iterable<int> { final int start; final int end; EvenNumbersIterable(this.start, this.end); @override Iterator<int> get iterator => EvenNumbersIterator(start, end); } class EvenNumbersIterator implements Iterator<int> { int current; final int end; bool _firstMove = true; EvenNumbersIterator(int start, this.end) : current = start - 2; @override bool moveNext() { if (_firstMove) { _firstMove = false; current += 2; } else { current += 2; } return current < end; } } void main() { EvenNumbersIterable evens = EvenNumbersIterable(0, 10); for (int number in evens) { print(number); } }
Resum
En aquest tema, hem après què són els iterables i com utilitzar-los en Dart. Hem vist com recórrer col·leccions predefinides com List
i Set
, i hem après a crear els nostres propis iterables personalitzats. Els iterables són una eina poderosa per treballar amb col·leccions de dades de manera eficient i flexible. En el proper mòdul, explorarem la programació orientada a objectes en Dart.
Curs de Programació en Dart
Mòdul 1: Introducció a Dart
- Introducció a Dart
- Configuració de l'Entorn de Desenvolupament
- El Teu Primer Programa en Dart
- Sintaxi i Estructura Bàsica
Mòdul 2: Conceptes Bàsics de Dart
Mòdul 3: Col·leccions
Mòdul 4: Programació Orientada a Objectes en Dart
Mòdul 5: Funcionalitats Avançades de Dart
Mòdul 6: Gestió d'Errors i Depuració
Mòdul 7: Paquets i Biblioteques de Dart
Mòdul 8: Dart per a Web i Mòbil
- Introducció a Flutter
- Construcció d'una Aplicació Simple amb Flutter
- Dart per al Desenvolupament Web