Funciones con bloques let/in

Las funciones personalizadas que hemos creado hasta ahora se escribían en una única línea y se limitaban a considerar los argumentos y aplicarles una función. Pero podemos escribir funciones más complejas en las que se vean involucrados cálculos realizados a los argumentos que servirán de baso para la devolución del resultado final de la función. Para esto no tenemos más que añadir bloques let e in al cuerpo de la función. La sintaxis en este caso es la siguiente:

NombreFunción = (<Argumentos>) =>
    let
        <Cuerpo de la función>
    in
        <Resultado de la función>

Por ejemplo, creemos una nueva consulta que devuelva la hipotenusa de un triángulo rectángulo a partir de la longitud de los catetos. Es decir, queremos devolver la raíz cuadrada de la suma de los cuadrados de los catetos. La función podría ser la siguiente:

(cateto1, cateto2) =>
    let
        cateto1_cuadrado = cateto1 * cateto1,
        cateto2_cuadrado = cateto2 * cateto2,
        suma_cuadrados = cateto1_cuadrado + cateto2_cuadrado
    in
        Number.Sqrt(suma_cuadrados)

Funciones con variables

Aparte de los bloques let e in, vemos que no hay nada que no conozcamos ya. A lo sumo, la función estándar Number.Sqrt, que devuelve la raíz cuadrada de un número. Solo nos restaría dar a esta consulta un nombre apropiado, como hipotenusa, por ejemplo.

Esta estructura del código nos permite escribir funciones tan complejas como necesitemos, y usarlas a lo largo de todas nuestras consultas.