Los 5 primeros correos válidos, normalizados
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
N = 100
Tiempo Empate
Memoria pico Empate
N = 10,000
Tiempo Empate
Memoria pico Empate
N = 1,000,000
Tiempo Gana FxDart
Memoria pico Empate
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í.