Elm:
Рефакторинг

Как это сделать:

Представьте, что у вас есть функция на Elm, которая делает слишком много, например, смешивает логику пользовательского интерфейса с обновлениями состояния. Это идеальный кандидат для рефакторинга. Изначально:

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 )

После рефакторинга мы разделяем обязанности, вынося логику в разные функции:

-- Логика обновления теперь отдельно
updateUserInput : String -> Model -> Model
updateUserInput input model = 
    { model | userInput = input }

-- Логика форматирования (представления) также отдельно
formatUserInput : Model -> (Model, Cmd Msg)
formatUserInput model =
    if String.length model.userInput > 5 then
        ( model, Cmd.none )
    else
        ( { model | userInput = "" }, Cmd.none ) -- Очистка ввода, если он слишком короткий, как пример правила.

-- Функция обновления теперь использует вспомогательные функции
updateAndFormat : String -> Model -> (Model, Cmd Msg)
updateAndFormat input model =
    model
    |> updateUserInput input
    |> formatUserInput

С этими изменениями вы получаете четкое разделение, и каждая функция становится легче для понимания и тестирования.

Глубокое погружение

Рефакторинг как формальная практика может быть отслежен до ранних дней программирования, когда стоимость изменения кода уже признавалась критически важным аспектом процесса разработки. В частности, книга Мартина Фаулера “Рефакторинг: Улучшение дизайна существующего кода”, опубликованная в конце 1990-х годов, действительно задала тон для рефакторинга с структурированным подходом и каталогом “запахов кода” для определения возможностей для рефакторинга.

В контексте Elm рефакторинг использует сильные стороны языка, такие как его сильная система типов, которая способствует уверенности в процессе. Альтернативы ручному рефакторингу могут включать в себя инструменты для автоматизированных преобразований кода, но инструментарий Elm в этой области все еще развивается по сравнению с некоторыми более старыми языками. Детали реализации часто касаются общих рефакторингов, таких как извлечение функций, переименование и упрощение условных выражений. Компилятор Elm - ключевой союзник в рефакторинге, так как он не позволит вам уйти далеко - он кричит, когда что-то не так, гарантируя, что ваш отрефакторенный код по-прежнему работает.

Смотрите также