En Dart, List Comprehension es una forma de crear y manipular listas de manera concisa y declarativa. Esto permite aplicar filtros, transformaciones y construir listas derivadas de otras listas, mejorando la legibilidad y eficiencia del código.
Dart no tiene una sintaxis de List Comprehension tan directa como en Python, pero permite construir listas de forma similar usando expresiones combinadas con ciclos for
y condiciones if
dentro de listas. Esto se logra mediante spread operators (...
), null-aware spread operators (...?
), y condiciones if
y bucles for
en la declaración de una lista.
for
Se puede usar el bucle for
directamente en una lista para construir una nueva lista basada en una existente:
void main() {
var numeros = [1, 2, 3, 4, 5];
// Crear una nueva lista multiplicando cada elemento por 2
var numerosDuplicados = [for (var numero in numeros) numero * 2];
print(numerosDuplicados); // Output: [2, 4, 6, 8, 10]
}
En este ejemplo, la lista numerosDuplicados
se crea usando una comprensión de listas que multiplica cada número de numeros
por 2.
if
Dart también permite agregar condiciones if
dentro de las listas, para incluir solo los elementos que cumplan ciertos criterios:
void main() {
var numeros = [1, 2, 3, 4, 5];
// Crear una lista con solo los números pares
var numerosPares = [for (var numero in numeros) if (numero % 2 == 0) numero];
print(numerosPares); // Output: [2, 4]
}
En este caso, solo los números pares de numeros
se agregan a la lista numerosPares
.
El operador de expansión ...
permite combinar varias listas en una sola, y el operador ...?
incluye una lista solo si no es null
.
void main() {
var listaA = [1, 2, 3];
var listaB = [4, 5];
var listaC;
var listaCombinada = [...listaA, ...listaB, if (listaC != null) ...?listaC];
print(listaCombinada); // Output: [1, 2, 3, 4, 5]
}
Aquí, listaA
y listaB
se combinan en listaCombinada
, y ...?listaC
se agrega solo si listaC
no es null
.
1. Código más limpio y conciso: Facilita la construcción de listas complejas de manera declarativa.
2. Mejora la eficiencia: Evita ciclos adicionales y estructuras condicionales externas.
3. Mejor legibilidad: Hace que la intención del código sea más clara, especialmente al realizar transformaciones y filtrados de listas.
Para más detalles, consulta la documentación oficial de Dart.
Jorge García
Fullstack developer