Los 5 primeros correos válidos, normalizados

Dart nativo basta

Requisito

Los datos de registro llegan sucios: espacios sobrantes, mayúsculas y minúsculas mezcladas y un par de cadenas que ni siquiera son correos. Normaliza cada entrada (recorta, pasa a minúsculas), quédate solo con los correos plausibles (que contengan @ y un punto) e imprime los cinco primeros. Los datos están en el código de abajo; ambas versiones deben imprimir las líneas que aparecen bajo Salida esperada.

Salida esperada
ada@example.com
grace@hopper.dev
lin@lang.org
ken@unix.org
dennis@unix.org

Lado a lado

Dart nativo

FxDart

Por qué difieren

No difieren, y de eso se trata. map, where y take vienen de serie en todo Iterable de Dart, son perezosos, y las dos versiones son el mismo pipeline salvo que where se llama filter. Para una cadena corta de normalizar-validar-truncar como esta, Dart nativo es igual de claro — recurre a él sin dudarlo. FxDart se gana su sitio cuando el pipeline necesita vocabulario del que Dart carece (groupBy, scan, zip, concurrent…) o cuando el resto del archivo ya encadena con fx; añadir una dependencia solo por este fragmento no aporta nada.

Benchmark

Apple M1 Max, 32 GB de RAM · Dart 3.12.2 (compilado AOT) · 2026-08-24

N = 100

Tiempo Empate

Dart nativo 5.2 µs
FxDart 4.6 µs

Memoria pico Empate

Dart nativo 16.4 MB
FxDart 16.5 MB

N = 10,000

Tiempo Empate

Dart nativo 563 µs
FxDart 518 µs

Memoria pico Empate

Dart nativo 19.9 MB
FxDart 20.0 MB

N = 1,000,000

Tiempo Gana FxDart

Dart nativo 72.5 ms
FxDart 67.1 ms

Memoria pico Empate

Dart nativo 176.3 MB
FxDart 176.0 MB

Las barras son medianas de iteraciones cronometradas repetidas en procesos nuevos por lado (los N pequeños se agrupan por resolución del temporizador). Dos lados a menos del 5% entre sí — o a menos de 0.6 ms, una diferencia que nadie puede percibir — cuentan como empate; las carreras relativas ajustadas se vuelven a medir hasta 5 veces. En una app, cualquier cosa por debajo de unos pocos milisegundos es invisible para el usuario, gane la barra que gane. La memoria es el RSS pico del proceso. La VM de Dart y el dataset son idénticos en ambos lados, así que la diferencia entre las dos barras es lo que retiene el pipeline en sí.