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: