Volver a la página principal
jueves 31 octubre 2024
5

Cómo usar Iterable en Dart

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.

¿Qué es un 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.

Acceso básico a un 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.

Métodos comunes de 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:

1. 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)
}

2. 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)
}

3. 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
}

4. 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'));
}

Creación de un 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.

Referencias

Para más información sobre Iterable en Dart, consulta la documentación oficial de Dart.

Etiquetas:
dart
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer