Tabla de interés compuesto
Requisito
Imprime una tabla de saldos año a año para $1000 al 5% de interés compuesto durante seis años —una línea por año, empezando por el saldo inicial del año 0, con cada importe formateado a dos decimales. Las constantes están en el código de abajo; ambas versiones deben imprimir las líneas que aparecen bajo Salida esperada.
Salida esperada
year 0: $1000.00 year 1: $1050.00 year 2: $1102.50 year 3: $1157.63 year 4: $1215.51 year 5: $1276.28 year 6: $1340.10
Lado a lado
Dart nativo
FxDart
Por qué difieren
Un saldo acumulado es un fold acumulado, y Dart nativo no
tiene una palabra para eso: fold solo da el valor final,
así que la versión nativa recurre a un bucle que inicializa una lista
con la línea del año 0, muta balance y va añadiendo —la
regla de capitalización, la iteración y el formato comparten un mismo
cuerpo. El scan de FxDart convierte cada saldo intermedio en
un valor del pipeline: el valor inicial es la fila del año 0, la regla
de capitalización es una única función pura y el formato es un paso
map aparte. ¿Quieres el año en que el saldo supera por
primera vez los $1200? Encadena un filtro —la versión con bucle tiene
que añadir otro flag en su lugar.
Benchmark
N = 100
Tiempo Empate
Memoria pico Empate
N = 10,000
Tiempo Empate
Memoria pico Empate
N = 1,000,000
Tiempo Gana nativo
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í.