Kotlin con curry

Si no han probado el Curry, deberian, es una especie de mole Indio muy sabroso, y también en programación se usa, principalmente en programación funcional, es increíblemente util y ayuda a tener menos errores y simplificar por mucho el código.

Aqui solo presento un pequeno ejemplo de como usar esta técnica con kotlin y despues lo compararemos con javascript, la verdad con java ya no me gusto :P pero se que se puede.

Simplemente a una lista de precios le calcularemos el Iva del 16%. No se vera mucho la ventaja de porque usar currying pero si como usarlo.

Con kotlin

data class Total(val precio: Double, val iva: Double, val total: Double)

val getImpuesto = { t: Double -> { i: Double -> t * i } }

val getIva = getImpuesto(0.16)

val precios = listOf<Double>(10.2, 12.3, 10.0, 11.0)

val resultados = precios.map({i: Double ->
    val imp = getIva(i)
    Total(i, imp, i + imp)
})

println(resultados)

Eso solo se pega en la función main de Kotlin y la salida es:

[Total(precio=10.2, iva=1.632, total=11.831999999999999), Total(precio=12.3, iva=1.9680000000000002, total=14.268), Total(precio=10.0, iva=1.6, total=11.6), Total(precio=11.0, iva=1.76, total=12.76)]

Con Javascript

const getImpuesto = t => i => t * i;

const getIva = getImpuesto(0.16);

const precios = [10.2, 12.3, 10.0, 11.0];

const resultados = precios.map(precio => {
  const iva = getIva(precio);
  return {
    precio,
    iva,
    total: precio + iva
  };
});

console.log(resultados);

Yo lo corri con Nodejs pero igual puedes usar chrome, opera, o firefox, pega el codigo en la consola de desarrollo y das enter

La salida es:

[ { precio: 10.2, iva: 1.632, total: 11.831999999999999 },
  { precio: 12.3, iva: 1.9680000000000002, total: 14.268 },
  { precio: 10, iva: 1.6, total: 11.6 },
  { precio: 11, iva: 1.76, total: 12.76 } ]

Personalmente me gusta mas Javascript pero que se le va a hacer, no me acomodo mucho con los tipos, aunque muchos blogs dicen que javascript va a absorber typescript en el futuro, la verdad quien sabe.