Att organisera kod i funktioner

Elm:
Att organisera kod i funktioner

Hur man gör:

Här är en bit Elm-kod med en enkel funktion för att hälsa på en användare:

module Main exposing (..)

import Html exposing (text)

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

main =
    text (greetUser "Casey")

Kör den, och du får utskriften: “Hej, Casey!”

Nu, låt oss säga att du vill lägga till mer personlig anpassning. Extrahera mer funktionalitet!

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

Nu när du kör den: “Howdy, Casey!” Magi? Nope, bara funktioner som gör sitt jobb.

Fördjupning

Förr i tiden var kod ofta en lång följd av instruktioner (tänk spaghettikod). Det var en mardröm att underhålla. Sedan kom strukturerad programmering, och med den, funktioner. Elm, liksom dess föregångare inom funktionell programmering, förlitar sig starkt på funktioner för organisering.

Du kan nästla funktioner, skapa closures, eller hålla dem rena för enkelhetens skull. Elm uppmuntrar det senare: rena funktioner med väldefinierade in- och utdata, vilket leder till enklare felsökning och testning.

Elm-funktioner kan också vara av högre ordning, vilket innebär att de kan acceptera eller returnera andra funktioner. Detta öppnar upp en värld av komponerbarhet. Elm har dock, till skillnad från vissa andra språk, inte funktionsoverloading; varje funktion måste ha ett unikt namn.

Dessutom inför Elm ett starkt statiskt typsystem som inte bara kontrollerar typerna men också utleder dem, vilket minskar den repetitiva koden.

När man jämför med alternativ som procedural eller objektorienterad kodorganisation i andra språk, betonar Elms tillvägagångssätt enkelhet och förutsägbarhet. Elm har inte objekt eller klasser. Du organiserar kod med funktioner och moduler istället för klasser och instanser.

Se också

För att gräva djupare, kolla in dessa resurser: