Elixir:
Refaktoryzacja

Jak to zrobić:

Uporządkujmy wspólny wzorzec Elixira. Zrefaktoryzujemy funkcję calculate_stats, która robi więcej niż powinna, dzieląc ją na mniejsze, wielokrotnego użytku kawałki.

defmodule Stats do
  # Oryginalny, nierozbudowany kod
  def calculate_stats(data) do
    total = Enum.sum(data)
    count = Enum.count(data)
    mean = total / count
    {mean, total}
  end
  
  # Zrefaktoryzowany kod
  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

# Przykładowe wyniki
# Przed refaktoryzacją
Stats.calculate_stats([1, 2, 3])
# => {2.0, 6}

# Po refaktoryzacji
Stats.calculate_stats_refactored([1, 2, 3])
# => {2.0, 6}

Jak można zauważyć, wynik pozostaje ten sam, ale teraz mamy modułowe funkcje, które można wykorzystać ponownie i testować niezależnie.

Głębsze zrozumienie

Refaktoryzacja nie jest nowym pojęciem; od wczesnych dni rozwoju oprogramowania jest kluczową częścią programowania. Znaczące prace, takie jak “Refaktoryzacja: Poprawa projektu istniejącego kodu” Martina Fowlera, dostarczają podstawowych praktyk dotyczących refaktoryzacji z wglądami kiedy i jak je stosować.

Alternatywą dla ręcznej refaktoryzacji są narzędzia do automatycznej analizy kodu, które mogą sugerować, a nawet przeprowadzać refaktoryzację. Jednak narzędzia automatyczne mogą nie zawsze pojmować pełny kontekst kodu i mogą przeoczyć subtelności, które zauważyłby recenzent ludzki.

Szczegóły implementacji w Elixirze obejmują zrozumienie paradygmatu funkcjonalnego i wykorzystanie dopasowania wzorców, klauzul strażniczych i operatora pipe do pisania jasnego i zwięzłego kodu. Na przykład, refaktoryzacja często wiąże się z konwertowaniem skomplikowanych funkcji w stylu imperatywnym na mniejsze, komponowalne funkcje, które są zgodne z preferencją Elixira dla niemutowalności i operacji wolnych od efektów ubocznych.

Zobacz także

Aby dowiedzieć się więcej o technikach refaktoryzacji specyficznych dla Elixira: