Informe mensual completo del libro de cuentas
Requisito
A partir de un mes de transacciones del libro de cuentas (los datos están en el código), construye una única cadena de informe con tres secciones: el total gastado (sin contar los ingresos), un desglose por categoría ordenado por gasto y los 3 comercios principales como lista numerada. Ambas versiones deben imprimir exactamente el informe que aparece bajo Salida esperada.
Salida esperada
July 2026 ledger Total spent: $201.99 By category: Bills $88.44 Food $84.40 Fun $15.00 Transport $14.15 Top merchants: 1. Electric Co $60.34 2. Green Grocer $43.20 3. Water Works $28.10
Lado a lado
Dart nativo
FxDart
Por qué difieren
En FxDart cada sección del informe tiene la misma forma:
groupBy → sumBy por grupo →
sortBy descendente —y después take y
zipWithIndex convierten la sección de comercios en un top
3 numerado sin ninguna variable de índice. La versión nativa tiene que
expresar cada uno de esos pasos en un dialecto distinto:
fold con un valor inicial para cada suma,
sortedBy<num> con una clave negada, un
collection-for para una sección y un bucle for indexado
para la otra. El informe crece sección a sección en ambos lados —pero
solo uno de los dos crece añadiendo pasos al pipeline en vez de
acumulando variables intermedias con formas distintas.
Benchmark
N = 100
Tiempo Empate
Memoria pico Empate
N = 10,000
Tiempo Empate
Memoria pico Gana FxDart
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í.