Categorías que superan su presupuesto mensual

Gana FxDart

Requisito

Cada categoría de gasto tiene un presupuesto mensual. A partir de las transacciones de julio, suma el total de cada categoría, quédate solo con las categorías que se pasaron de su presupuesto e imprímelas empezando por la peor —con el gasto, el presupuesto y el exceso en cada línea. Los datos están en el código de abajo; ambas versiones deben imprimir las líneas que aparecen bajo Salida esperada.

Salida esperada
Over budget in July:
Food: $135.75 spent, $120.00 budget (over by $15.75)
Fun: $34.75 spent, $30.00 budget (over by $4.75)
Bills: $90.33 spent, $90.00 budget (over by $0.33)

Lado a lado

Dart nativo

FxDart

Por qué difieren

La línea de formato es idéntica en ambas versiones —la diferencia está en todo lo que viene antes. Dart nativo hace la agrupación a mano en un mapa mutable y luego cambia de modismo dos veces: un bucle for para sumar, un where para filtrar, un sort en cascada con un comparador hecho a mano para ordenar. La versión de FxDart es un solo vocabulario de principio a fin: groupBy, map a los totales, filter contra el presupuesto, sortBy por el exceso, join. Cada regla de negocio —pasarse del presupuesto, la peor primero— es un paso con nombre que puedes señalar en una revisión de código.

Benchmark

Apple M1 Max, 32 GB de RAM · Dart 3.12.2 (compilado AOT) · 2026-08-24

N = 100

Tiempo Empate

Dart nativo 3.8 µs
FxDart 3.6 µs

Memoria pico Empate

Dart nativo 16.5 MB
FxDart 16.6 MB

N = 10,000

Tiempo Empate

Dart nativo 185 µs
FxDart 90 µs

Memoria pico Gana FxDart

Dart nativo 21.8 MB
FxDart 15.6 MB

N = 1,000,000

Tiempo Gana FxDart

Dart nativo 21.5 ms
FxDart 13.0 ms

Memoria pico Gana FxDart

Dart nativo 90.1 MB
FxDart 82.7 MB

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í.