Elm:
Refatoração
Como Fazer:
Considere que você tem uma função Elm que está fazendo demais, como misturar lógica de UI com atualizações de estado. É um candidato perfeito para refatoração. Originalmente:
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 )
Depois da refatoração, separamos as preocupações puxando a lógica para diferentes funções:
-- A lógica de atualização está separada
updateUserInput : String -> Model -> Model
updateUserInput input model =
{ model | userInput = input }
-- A lógica de formatação (view) também está separada
formatUserInput : Model -> (Model, Cmd Msg)
formatUserInput model =
if String.length model.userInput > 5 then
( model, Cmd.none )
else
( { model | userInput = "" }, Cmd.none ) -- Limpa a entrada se for muito curta, como uma regra de exemplo.
-- A função de atualização agora usa funções auxiliares
updateAndFormat : String -> Model -> (Model, Cmd Msg)
updateAndFormat input model =
model
|> updateUserInput input
|> formatUserInput
Com essas mudanças, você tem uma clara separação, e cada função fica mais fácil de entender e testar.
Aprofundamento
Refatoração como uma prática formal pode ser rastreada até os primórdios da programação, quando o custo de mudar o código já estava sendo reconhecido como um aspecto crítico do processo de desenvolvimento. Notavelmente, o livro de Martin Fowler “Refatoração: Aperfeiçoando o Design de Códigos Existentes”, publicado no final dos anos 90, realmente preparou o terreno para a refatoração com uma abordagem estruturada e um catálogo de “cheiros de código” para identificar oportunidades de refatoração.
No contexto de Elm, a refatoração aproveita as forças da linguagem, como seu forte sistema de tipos, que promove confiança durante o processo. Alternativas para refatoração manual podem incluir ferramentas automatizadas de transformação de código, mas as ferramentas de Elm nessa área ainda estão amadurecendo comparadas a algumas linguagens mais antigas. Detalhes de implementação muitas vezes giram em torno de refatorações comuns como extração de função, renomeação e simplificação de condicionais. O compilador de Elm é um aliado chave na refatoração, pois ele não permite que você se desvie muito — ele alerta sempre que algo está errado, garantindo que seu código refatorado ainda funcione.