Elixir:
Refaktorisering

Hur man gör:

Låt oss städa upp ett vanligt Elixir-mönster. Vi kommer att refaktorisera en funktion calculate_stats som gör mer än den borde genom att bryta ner den i mindre, återanvändbara delar.

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

# Exempel på utskrift
# Före Refaktorisering
Stats.calculate_stats([1, 2, 3])
# => {2.0, 6}

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

Som du kan se förblir utdatan den samma, men nu har vi modulära funktioner som kan återanvändas och testas oberoende.

Fördjupning

Refaktorisering är inte ett nytt koncept; det har varit en avgörande del av programmeringen sedan de tidiga dagarna av programvaruutveckling. Framstående verk, såsom Martin Fowlers “Refactoring: Improving the Design of Existing Code”, tillhandahåller grundläggande metoder för refaktorisering med insikter om när och hur man ska tillämpa dem.

Alternativ till manuell refaktorisering inkluderar automatiserade kodanalysverktyg, vilka kan föreslå eller till och med genomföra refaktoriseringar. Dock kanske automatiserade verktyg inte alltid förstår hela sammanhanget i koden och kan missa nyanser som en mänsklig granskare skulle uppmärksamma.

Implementeringsdetaljer i Elixir specifikt inkluderar förståelsen för det funktionella paradigmet och att utnyttja mönstermatchning, vaktuttryck och pipe-operatören för att skriva klar och koncis kod. Till exempel innebär refaktorisering ofta att man omvandlar komplexa imperativa funktioner till mindre, sammansättbara funktioner som följer Elixirs preferens för oföränderlighet och operationer utan sidoeffekter.

Se också

För mer om Elixir-specifika refaktoreringstekniker: