Plan de reposición de inventario
Requisito
A partir de una lista de existencias (los datos están en el código), encuentra los artículos por debajo de su stock mínimo, priorízalos por mayor déficit y pídelos en ese orden de prioridad, pero detente antes de que el coste acumulado supere el presupuesto de $500. Imprime cada pedido planificado con su total acumulado y luego un resumen de lo que se pidió y de lo que queda. Ambas versiones deben imprimir el plan que aparece bajo Salida esperada.
Salida esperada
Restock plan (budget $500.00) Paper Cups x200 $10.00 running $10.00 Espresso Beans x 12 $216.00 running $226.00 Oat Milk x 24 $91.20 running $317.20 Filter Papers x 10 $64.00 running $381.20 Cleaning Tabs x 8 $76.00 running $457.20 Ordering 5 of 6 needed items; total $457.20, $42.80 left
Lado a lado
Dart nativo
FxDart
Por qué difieren
El corte por presupuesto es la parte interesante. FxDart convierte el
total acumulado en datos: scan produce el flujo
de costes acumulados, zip empareja cada artículo con su
total acumulado y takeWhile corta el plan en el
presupuesto —la regla de corte es un predicado en una sola línea, y los
totales acumulados ya están ahí para imprimirlos—. Dart nativo lo
entrelaza todo en un único bucle: una variable mutable
running, un break anticipado y el formateo
comparten el cuerpo del bucle, de modo que la política («para cuando te
pases del presupuesto») vive dentro del flujo de control en lugar de
ser una etapa visible del pipeline que podrías mover o probar por
separado.
Benchmark
N = 100
Tiempo Empate
Memoria pico Empate
N = 10,000
Tiempo Gana FxDart
Memoria pico Gana nativo
N = 1,000,000
Tiempo Gana FxDart
Memoria pico Gana nativo
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í.