Nivel de stock tras cada movimiento
Requisito
El libro de almacén de un SKU lista movimientos con signo — recepciones en positivo, envíos en negativo — partiendo de un stock inicial de 20. Imprime el nivel inicial y luego cada movimiento con el nivel resultante, marcando cualquier nivel negativo como backorder. Los movimientos están en el código; las dos versiones deben imprimir las líneas que aparecen bajo Salida esperada.
Salida esperada
start: 20 +40: 60 -25: 35 -50: -15 (backorder) +30: 15 -20: -5 (backorder) -10: -15 (backorder) +45: 30
Lado a lado
RxDart
FxDart
Por qué difieren
El estado acumulado es scan en ambos dialectos — el de
FxDart es el port de FxTS de la misma idea Rx, así que el fold en sí
es idéntico: un record acumulador que lleva la etiqueta del movimiento
y el nivel posterior. La única costura visible es la semilla. El
scan de FxDart emite la semilla como su primer valor, así
que la línea inicial start: 20 cae de la cadena gratis.
El scan de RxDart empieza a emitir en el primer pliegue,
así que el nivel inicial hay que reproducirlo con
startWith — un operador extra, no una penuria.
Pasada la semilla, los dos pipelines son las mismas tres palabras, y
el map que marca se lee igual de bien en cualquiera de
los dos lados — la versión pull simplemente se mantiene síncrona
porque el libro ya está en memoria, mientras que la versión stream
espera su propia entrega. El estado acumulado sobre una secuencia
ordenada es terreno propio de ambos modelos: empate, con la diferencia
de emisión de la semilla como la única curiosidad que conviene
recordar al portar entre ellos.
Benchmark
N = 100
Tiempo Empate
Memoria pico Gana RxDart
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í.