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