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 - ключевой союзник в рефакторинге, так как он не позволит вам уйти далеко - он кричит, когда что-то не так, гарантируя, что ваш отрефакторенный код по-прежнему работает.