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

Дивіться також