Totales semanales de una serie diaria
Requisito
Tres semanas de gasto diario (del 1 al 21 de agosto, guardado en
centavos) se enrollan en una línea por semana:
week n: $total, con el total convertido a dólares a dos
decimales. Los 21 importes están en el código; las dos versiones deben
imprimir las tres líneas que aparecen bajo Salida esperada.
Salida esperada
week 1: $83.50 week 2: $89.95 week 3: $91.75
Lado a lado
RxDart
FxDart
Por qué difieren
El ventaneo en sí queda en tablas: bufferCount(7) y
chunk(7) son el idioma idéntico para la misma ventana
fija, y ambos emitirían una ventana final corta si 21 no dividiera
exacto. El trabajo se parte en numerar las ventanas. RxDart
no tiene operador con índice, así que la jugada idiomática es reclutar
a scan como contador — un record acumulador cuyo único
papel es llevar week + 1 junto al búfer. Funciona, pero
el fold es un espectador vestido con la ropa de un operador de estado.
El lado pull tiene una palabra hecha a propósito:
zipWithIndex empareja cada chunk con su posición de forma
perezosa, sin acumulador a la vista, y sumBy pliega los
centavos de cada semana a dólares en el mismo gesto. Ese es el patrón
recurrente del tier 2 — ambos modelos ventanean bien los datos
finitos, pero el vocabulario pull es más ancho exactamente donde la
contabilidad (índices, claves, agregados parciales) se encuentra con
la ventana. Un operador reutilizado contra uno pensado para esto: el
veredicto se lo lleva FxDart.
Benchmark
N = 98
Tiempo Empate
Memoria pico Empate
N = 999,999
Tiempo Gana FxDart
Memoria pico Gana RxDart
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í.