Gasto dentro de una ventana de fechas
Requisito
Una exportación del libro de cuentas ya viene ordenada por fecha. Suma el gasto entre el 2026-07-08 y el 2026-07-21, ambos incluidos, sin recorrer la lista entera: salta las entradas anteriores a la ventana, toma entradas mientras sigas dentro de ella y suma lo que quede. Los datos están en el código de abajo; las dos versiones deben imprimir la línea que aparece bajo Salida esperada.
Salida esperada
Spent 2026-07-08 to 2026-07-21: $104.04
Lado a lado
Dart nativo
FxDart
Por qué difieren
Apenas. Dart trae skipWhile y takeWhile en
todo Iterable, y ambos son perezosos: la versión en Dart
nativo aprovecha el orden exactamente igual que la de FxDart, y se lee
igual de bien. La única diferencia real está en el último paso:
sumBy nombra la intención, mientras que fold
deletrea el valor inicial y la combinación. Eso es ganar por una
palabra, no por estructura —llamémoslo empate. Si tu código ya encadena
con fx, úsalo aquí por coherencia; si no, Dart nativo va
bien.
Benchmark
N = 100
Tiempo Empate
Memoria pico Gana FxDart
N = 10,000
Tiempo Empate
Memoria pico Gana FxDart
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í.