Elixir:
Refaktorering

Hvordan:

La oss rydde opp i et vanlig Elixir-mønster. Vi vil refaktorere en funksjon calculate_stats som gjør mer enn den burde ved å bryte den ned i mindre, gjenbrukbare deler.

defmodule Stats do
  # Opprinnelig, urefaktorert kode
  def calculate_stats(data) do
    total = Enum.sum(data)
    antall = Enum.count(data)
    gjennomsnitt = total / antall
    {gjennomsnitt, total}
  end
  
  # Refaktorert kode
  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
    gjennomsnitt = calculate_mean(data)
    total = calculate_total(data)
    {gjennomsnitt, total}
  end
end

# Eksempel på resultat
# Før refaktorering
Stats.calculate_stats([1, 2, 3])
# => {2.0, 6}

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

Som du kan se, forblir resultatet det samme, men nå har vi modulære funksjoner som kan gjenbrukes og testes uavhengig.

Dypdykk

Refaktorering er ikke et nytt konsept; det har vært en avgjørende del av programmering siden de tidlige dagene av programvareutvikling. Fremtredende verker, som Martin Fowlers “Refactoring: Improving the Design of Existing Code”, gir grunnleggende praksiser for refaktorering med innsikt i når og hvordan de skal brukes.

Alternativer til manuell refaktorering inkluderer automatiserte kodeanalyseverktøy, som kan foreslå eller til og med utføre refaktoreringer. Imidlertid kan automatiserte verktøy ikke alltid forstå hele konteksten av koden og kan gå glipp av nyanser som en menneskelig gjennomgåer ville fange opp.

Implementeringsdetaljer i Elixir spesifikt inkluderer å forstå det funksjonelle paradigmet og utnytte mønstermatching, vaktsetninger og rør-operatøren for å skrive klar og konsis kode. For eksempel innebærer refaktorering ofte å konvertere komplekse imperativ-stilfunksjoner til mindre, sammensetbare funksjoner som følger Elixirs preferanse for immutabilitet og operasjoner fri for sideeffekter.

Se også

For mer om Elixir-spesifikke refaktoreringsmetoder: