Elixir:
Refactoring

Hoe te:

Laten we een veelvoorkomend Elixir-patroon opruimen. We gaan een functie calculate_stats refactoren die meer doet dan het zou moeten door het in kleinere, herbruikbare stukken te breken.

defmodule Stats do
  # Originele, niet-gerestructureerde code
  def calculate_stats(data) do
    totaal = Enum.sum(data)
    aantal = Enum.count(data)
    gemiddelde = totaal / aantal
    {gemiddelde, totaal}
  end
  
  # Gerefactorde code
  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
    gemiddelde = calculate_mean(data)
    totaal = calculate_total(data)
    {gemiddelde, totaal}
  end
end

# Voorbeelduitvoer
# Voor Refactoring
Stats.calculate_stats([1, 2, 3])
# => {2.0, 6}

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

Zoals je kunt zien, blijft de uitvoer hetzelfde, maar nu hebben we modulaire functies die onafhankelijk kunnen worden hergebruikt en getest.

Diepere Duik

Refactoring is geen nieuw concept; het is sinds de vroege dagen van softwareontwikkeling een cruciaal onderdeel van programmeren geweest. Opmerkelijke werken, zoals Martin Fowlers “Refactoring: Improving the Design of Existing Code”, bieden fundamentele praktijken voor refactoring met inzichten in wanneer en hoe ze toe te passen.

Alternatieven voor handmatige refactoring omvatten geautomatiseerde codeanalysetools, die suggesties voor refactoring kunnen doen of zelfs refactoring kunnen uitvoeren. Echter, geautomatiseerde tools begrijpen mogelijk niet altijd de volledige context van de code en kunnen subtiliteiten missen die een menselijke beoordelaar zou vangen.

Implementatiedetails in Elixir specifiek omvatten het begrijpen van het functionele paradigma en het gebruik van patroonmatching, guard clauses en de pipe-operator om duidelijke en bondige code te schrijven. Refactoring omvat vaak het converteren van complexe imperatieve-stijlfuncties naar kleinere, samenstelbare functies die de voorkeur geven aan Elixir’s voorkeur voor onveranderlijkheid en operaties zonder bijeffecten.

Zie Ook

Voor meer over Elixir-specifieke refactoringtechnieken: