Elm:
Code organiseren in functies

Hoe:

Hier is een stuk Elm-code met een eenvoudige functie om een gebruiker te begroeten:

module Main exposing (..)

import Html exposing (text)

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

main =
    text (greetUser "Casey")

Voer het uit en je krijgt de uitvoer: “Hallo, Casey!”

Stel nu dat je meer personalisatie wilt toevoegen. Extra functionaliteit uithalen!

module Main exposing (..)

import Html exposing (text)

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

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

main =
    text (personalGreeting "Casey")

Nu, als je het uitvoert: “Howdy, Casey!” Magie? Nee, gewoon functies die hun ding doen.

Diepere duik

Vroeger was code vaak één lange reeks instructies (denk aan spaghetti-code). Het was een nachtmerrie om te onderhouden. Toen kwam gestructureerd programmeren, en daarmee, functies. Elm, net als zijn voorgangers in functioneel programmeren, leunt zwaar op functies voor organisatie.

Je kunt functies nesten, sluitingen creëren, of ze puur houden voor eenvoud. Elm stimuleert het laatste: pure functies met goed gedefinieerde invoer en uitvoer, wat leidt tot eenvoudiger debuggen en testen.

Elm-functies kunnen ook hogere-ordefuncties zijn, wat betekent dat ze andere functies kunnen accepteren of retourneren. Dit opent een wereld van samenstelbaarheid. Echter, in tegenstelling tot sommige andere talen, heeft Elm geen functie-overbelasting; elke functie moet een unieke naam hebben.

Bovendien legt Elm een sterk statisch typeersysteem op dat niet alleen de types controleert, maar ze ook afleidt, waardoor de boilerplate-code vermindert.

Vergeleken met alternatieven zoals procedurele of objectgeoriënteerde codeorganisatie in andere talen, benadrukt Elm’s benadering eenvoud en voorspelbaarheid. Elm heeft geen objecten of klassen. Je organiseert code met functies en modules in plaats van klassen en instanties.

Zie ook

Om dieper te graven, bekijk deze bronnen: