Elm:
Organizando o código em funções

Como fazer:

Aqui está um trecho de código Elm com uma função simples para cumprimentar um usuário:

module Main exposing (..)

import Html exposing (text)

greetUser : String -> String
greetUser userName =
    "Olá, " ++ userName ++ "!"

main =
    text (greetUser "Casey")

Execute-o, e você terá a saída: “Olá, Casey!”

Agora, digamos que você queira adicionar mais personalização. Extraia mais funcionalidades!

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")

Agora, quando executar: “Howdy, Casey!” Magia? Não, apenas funções fazendo o seu trabalho.

Mergulho Profundo

Antigamente, o código era frequentemente uma longa sequência de instruções (pense em código espaguete). Era um pesadelo para manter. Então veio a programação estruturada e, com ela, as funções. Elm, como seus predecessores de programação funcional, depende fortemente de funções para organização.

Você pode aninhar funções, criando fechamentos, ou mantê-las puras para simplicidade. Elm encoraja o último: funções puras com entradas e saídas bem definidas, levando a uma depuração e teste mais fáceis.

As funções de Elm também podem ser de ordem superior, o que significa que elas podem aceitar ou retornar outras funções. Isso abre um mundo de composabilidade. No entanto, ao contrário de algumas outras línguas, Elm não possui sobrecarga de função; cada função deve ter um nome único.

Além disso, Elm impõe um sistema de tipagem estática forte que não só verifica os tipos, mas também os infere, reduzindo o código redundante.

Comparado com alternativas como organização de código procedural ou orientado a objetos em outras línguas, a abordagem do Elm enfatiza simplicidade e previsibilidade. Elm não tem objetos ou classes. Você organiza o código com funções e módulos ao invés de classes e instâncias.

Veja Também

Para explorar mais a fundo, confira estes recursos: