En Dart, Iterable es una clase base para todas las colecciones que pueden ser iteradas (recorridas), como listas y conjuntos. Un Iterable permite acceder a sus elementos en secuencia, facilitando el uso de operaciones como filtros, mapeos y reducción de elementos. Esta clase ofrece métodos útiles para manipular y recorrer colecciones de forma flexible y optimizada.
Iterable en Dart?
Un Iterable es una colección de elementos a los que se puede acceder de uno en uno. La clase Iterable no almacena datos en sí misma, sino que define cómo se accede a los datos. Las listas (List) y conjuntos (Set) en Dart implementan Iterable, y ofrecen acceso a los elementos mediante un iterador.
Iterable
Aquí tienes un ejemplo básico de cómo recorrer un Iterable utilizando un bucle for:
void main() {
Iterable<int> numeros = [1, 2, 3, 4, 5];
for (var numero in numeros) {
print(numero);
}
}
En este ejemplo, numeros es un Iterable de enteros, y cada elemento se imprime secuencialmente. Dart convierte automáticamente la lista [1, 2, 3, 4, 5] en un Iterable.
Iterable
Dart proporciona varios métodos útiles para trabajar con Iterable, como map, where, reduce, y forEach. Aquí hay una descripción de algunos métodos clave:
map
El método map permite aplicar una función a cada elemento y devuelve un nuevo Iterable con los resultados.
void main() {
Iterable<int> numeros = [1, 2, 3];
var dobles = numeros.map((numero) => numero * 2);
print(dobles); // Salida: (2, 4, 6)
}
where
where filtra los elementos del Iterable según una condición, devolviendo un nuevo Iterable con los elementos que cumplen dicha condición.
void main() {
Iterable<int> numeros = [1, 2, 3, 4, 5];
var pares = numeros.where((numero) => numero.isEven);
print(pares); // Salida: (2, 4)
}
reduce
El método reduce combina todos los elementos en un solo valor, aplicando una función acumulativa. Este método es útil para operaciones como suma o concatenación.
void main() {
Iterable<int> numeros = [1, 2, 3, 4];
var suma = numeros.reduce((a, b) => a + b);
print(suma); // Salida: 10
}
forEach
forEach permite ejecutar una función en cada elemento del Iterable sin devolver un nuevo Iterable. Es útil cuando solo necesitas realizar acciones sobre cada elemento.
void main() {
Iterable<String> frutas = ['manzana', 'plátano', 'naranja'];
frutas.forEach((fruta) => print('Me gusta $fruta'));
}
Iterable personalizado
Es posible crear un Iterable personalizado en Dart implementando la clase Iterable. Esto es útil si deseas definir tu propia secuencia de valores.
class ContadorIterable extends Iterable<int> {
final int hasta;
ContadorIterable(this.hasta);
@override
Iterator<int> get iterator => _ContadorIterator(hasta);
}
class _ContadorIterator extends Iterator<int> {
final int hasta;
int actual = -1;
_ContadorIterator(this.hasta);
@override
int get current => actual;
@override
bool moveNext() {
if (actual < hasta) {
actual++;
return true;
}
return false;
}
}
void main() {
var contador = ContadorIterable(3);
for (var numero in contador) {
print(numero); // Salida: 0, 1, 2, 3
}
}
En este ejemplo, ContadorIterable es un Iterable personalizado que produce números del 0 hasta el valor especificado.
Para más información sobre Iterable en Dart, consulta la documentación oficial de Dart.
Jorge García
Fullstack developer