Alinea el pronóstico con los datos reales
Requisito
Un pronóstico de temperatura a cinco días está junto a lo que el sensor midió realmente. Empareja las dos series posición a posición e imprime una línea por día: pronóstico, real y la diferencia con signo a un decimal. Los datos están en el código; las dos versiones deben imprimir las líneas que aparecen bajo Salida esperada.
Salida esperada
day 1: 21.0 forecast vs 20.6 actual (-0.4) day 2: 22.5 forecast vs 23.1 actual (+0.6) day 3: 23.0 forecast vs 23.0 actual (+0.0) day 4: 24.5 forecast vs 25.2 actual (+0.7) day 5: 22.0 forecast vs 21.4 actual (-0.6)
Lado a lado
RxDart
FxDart
Por qué difieren
El emparejado posicional es simétrico entre los modelos y ambas
bibliotecas lo traen: zipWith combina el enésimo evento
de un stream con el enésimo de otro, zip empareja los
enésimos tirones de dos iterables. Ambos se detienen en el lado más
corto, ambos conservan el orden por construcción. La función de
formateo se comparte literalmente, así que los paneles difieren solo
en cómo las dos series se elevan a un pipeline.
Los modelos sí esconden maquinaria distinta bajo el nombre compartido.
El zipWith de stream es un pequeño motor de coordinación:
dos suscripciones vivas, un búfer de un hueco para el lado que vaya
por delante, y pausa/reanudación para impedir que un productor rápido
desborde a uno lento. El zip de iterables son dos
iteradores avanzados al unísono — el tirón del consumidor es
la sincronización, así que no hay nada que almacenar y nadie a quien
pausar. Con dos listas fijas nada de esa maquinaria llega a
ejercitarse, y exactamente por eso este es un empate: elige la versión
que coincida con el lugar donde tus series viven de verdad.
Benchmark
N = 100
Tiempo Empate
Memoria pico Empate
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í.