Suma los importes pares válidos
Requisito
Una importación de extracto produjo una lista de importes parseados en
la que dos líneas no se pudieron parsear (null). Descarta
los fallos, quédate con los importes pares e imprime
su total. Los datos están en el código; las dos versiones deben
imprimir la línea que aparece bajo Salida esperada.
Salida esperada
Even total: 202
Lado a lado
RxDart
FxDart
Por qué difieren
Los pipelines son casi idénticos palabra por palabra —
whereNotNull → where → fold frente a
compact → filter → sum. Lo que difiere es todo lo que hay
alrededor. El lado RxDart tiene que elevar una lista
corriente a un Stream, volverse asíncrono y hacer
await de un fold, porque un stream solo entrega valores a
lo largo de vueltas del event loop — incluso cuando todos los valores
ya están en memoria. El lado FxDart sigue siendo una expresión
síncrona: tirar de los valores, sumar, listo.
Ese es el tema recurrente de esta Parte: para datos que son
finitos y ya están aquí, un stream añade un mecanismo de
entrega que el problema nunca pidió. El vocabulario de operadores de
RxDart es bueno — whereNotNull es exactamente
compact — pero el modelo de debajo cobra un impuesto
asíncrono en cada tarea sobre datos fijos. Aquí la respuesta entera es
un número, así que la ceremonia — la elevación, el main asíncrono, el
fold con await — es toda la diferencia entre los dos programas; eso es
lo que sostiene el veredicto en esta página, mientras que parejas
posteriores con el mismo residuo se quedan en empate. El veredicto se
invierte en la Parte 4, donde los valores llegan de verdad a lo largo
del tiempo y esa misma maquinaria pasa a ser el punto.
Benchmark
N = 100
Tiempo Empate
Memoria pico Empate
N = 1,000,000
Tiempo Gana FxDart
Memoria pico Gana FxDart
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í.