Elm:
Organizando código en funciones

Cómo hacerlo:

Aquí tienes un fragmento de código Elm con una sencilla función para saludar a un usuario:

module Main exposing (..)

import Html exposing (text)

greetUser : String -> String
greetUser userName =
    "Hello, " ++ userName ++ "!"

main =
    text (greetUser "Casey")

Ejecútalo y obtendrás la salida: “¡Hola, Casey!”

Ahora, supongamos que quieres añadir más personalización. ¡Extrae más funcionalidad!

module Main exposing (..)

import Html exposing (text)

greetUser : String -> String -> String
greetUser greeting userName =
    greeting ++ ", " ++ userName ++ "!"

personalGreeting : String -> String
personalGreeting userName =
    greetUser "Howdy" userName

main =
    text (personalGreeting "Casey")

Ahora, cuando lo ejecutas: “¡Howdy, Casey!” ¿Magia? No, solo funciones haciendo lo suyo.

Profundizando

En el pasado, el código a menudo era una larga secuencia de instrucciones (piensa en el código espagueti). Era una pesadilla de mantener. Luego llegó la programación estructurada y con ella, las funciones. Elm, como sus predecesores en la programación funcional, confía mucho en las funciones para la organización.

Puedes anidar funciones, creando cierres (closures), o mantenerlas puras para simplicidad. Elm fomenta lo segundo: funciones puras con entradas y salidas bien definidas, lo que lleva a un depurado y pruebas más fáciles.

Las funciones de Elm también pueden ser de orden superior, lo que significa que pueden aceptar o devolver otras funciones. Esto abre un mundo de composición. Sin embargo, a diferencia de otros lenguajes, Elm no tiene sobrecarga de funciones; cada función debe tener un nombre único.

Además, Elm impone un fuerte sistema de tipado estático que no solo verifica los tipos sino que también los infiere, reduciendo el código repetitivo.

En comparación con alternativas como la organización de código procedimental o la programación orientada a objetos en otros lenguajes, el enfoque de Elm enfatiza la simplicidad y la previsibilidad. Elm no tiene objetos ni clases. Organizas el código con funciones y módulos en lugar de clases e instancias.

Ver también

Para profundizar más, consulta estos recursos: