Elm:
Refaktorisering
Hur man gör:
Anta att du har en Elm-funktion som gör för mycket, som att blanda användargränssnittslogik med statusuppdateringar. Den är en perfekt kandidat för refaktorisering. Ursprungligen:
updateAndFormat : String -> Model -> (Model, Cmd Msg)
updateAndFormat input model =
let
updatedModel = { model | userInput = input }
in
if String.length input > 5 then
( updatedModel, Cmd.none )
else
( model, Cmd.none )
Efter refaktoriseringen separerar vi bekymmer genom att dra ut logiken till olika funktioner:
-- Uppdateringslogiken är separat
updateUserInput : String -> Model -> Model
updateUserInput input model =
{ model | userInput = input }
-- Logiken för formatering (vy) är också separat
formatUserInput : Model -> (Model, Cmd Msg)
formatUserInput model =
if String.length model.userInput > 5 then
( model, Cmd.none )
else
( { model | userInput = "" }, Cmd.none ) -- Töm inmatningen om den är för kort, som ett exempelregel.
-- Uppdateringsfunktionen använder nu hjälpfunktioner
updateAndFormat : String -> Model -> (Model, Cmd Msg)
updateAndFormat input model =
model
|> updateUserInput input
|> formatUserInput
Med dessa ändringar har du tydlig separation, och varje funktion är lättare att förstå och testa.
Djupdykning
Refaktorisering som en formell praxis kan spåras tillbaka till programmeringens tidiga dagar när kostnaden för att ändra kod redan började ses som en kritisk aspekt av utvecklingsprocessen. Noterbart är att Martin Fowlers bok “Refaktorisering: Att förbättra utformningen av befintlig kod,” publicerad i slutet av 1990-talet, verkligen satte scenen för refaktorisering med ett strukturerat angreppssätt och katalog av “kodlukter” för att identifiera refaktoriseringsmöjligheter.
I kontexten av Elm, utnyttjar refaktorisering språkets styrkor, som dess starka typsystem, vilket främjar förtroende under processen. Alternativ till manuell refaktorisering kan inkludera automatiserade kodtransformationsverktyg, men Elm:s verktyg inom detta område är fortfarande under utveckling jämfört med vissa äldre språk. Implementeringsdetaljer kretsar ofta kring vanliga refaktoriseringar som funktionsextraktion, omdöpning och förenkling av konditionaler. Elm:s kompilator är en viktig allierad i refaktoriseringen, den låter dig inte komma undan med mycket – den skriker när något är fel, och säkerställer att din refaktoriserade kod fortfarande fungerar.