Elixir:
Рефакторинг
Як:
Давайте впорядкуємо загальноприйнятий шаблон Elixir. Ми відрефакторимо функцію calculate_stats
, яка робить більше, ніж повинна, розділивши її на менші, перевикористовувані частини.
defmodule Stats do
# Оригінальний, невідрефакторений код
def calculate_stats(data) do
total = Enum.sum(data)
count = Enum.count(data)
mean = total / count
{mean, total}
end
# Відрефакторений код
def calculate_mean(data), do: Enum.sum(data) / Enum.count(data)
def calculate_total(data), do: Enum.sum(data)
def calculate_stats_refactored(data) do
mean = calculate_mean(data)
total = calculate_total(data)
{mean, total}
end
end
# Приклад виводу
# До рефакторингу
Stats.calculate_stats([1, 2, 3])
# => {2.0, 6}
# Після рефакторингу
Stats.calculate_stats_refactored([1, 2, 3])
# => {2.0, 6}
Як можна бачити, результат залишається тим самим, але тепер у нас є модульні функції, які можна використовувати повторно і тестувати незалежно.
Глибше Занурення
Рефакторінг — не новий концепт; він є важливою частиною програмування з ранніх днів розробки програмного забезпечення. Видатні праці, такі як “Рефакторінг: Покращення дизайну наявного коду” Мартіна Фаулера, надають основоположні практики для рефакторингу з інсайтами щодо того, коли та як їх застосовувати.
Альтернативами ручному рефакторингу є інструменти автоматичного аналізу коду, які можуть пропонувати або навіть виконувати рефакторинги. Однак автоматизовані інструменти не завжди можуть повністю охопити контекст коду і можуть упустити нюанси, які помітив би людський рецензент.
Деталі впровадження в Elixir конкретно включають розуміння функціонального парадигму та використання візерунка відповідностей, охоронних клоз, і оператора трубопроводу для написання чіткого та лаконічного коду. Наприклад, рефакторинг часто включає перетворення складних імператив-стильних функцій на менші, композиційні функції, які відповідають перевазі Elixir за незмінністю та операціями без побічних ефектів.
Дивіться Також
Для більшого ознайомлення з техніками рефакторингу специфічними для Elixir:
- Офіційні гайди Elixir
- “Рефакторінг: Покращення дизайну наявного коду” Мартіна Фаулера, для загальних принципів, які можна застосувати до Elixir.
- Credo, статичний інструмент аналізу коду для Elixir, який спонукає до кращих практик.
- Трек Elixir в Exercism, для практичних вправ, які часто включають рефакторинг.