Elixir:
Rifattorizzazione
Come fare:
Mettiamo in ordine un pattern comune di Elixir. Rifattorizzeremo una funzione calculate_stats
che fa più di quanto dovrebbe spezzandola in pezzi più piccoli e riutilizzabili.
defmodule Stats do
# Codice originale, non rifattorizzato
def calculate_stats(data) do
total = Enum.sum(data)
count = Enum.count(data)
mean = total / count
{mean, total}
end
# Codice rifattorizzato
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
# Output di esempio
# Prima del Refactoring
Stats.calculate_stats([1, 2, 3])
# => {2.0, 6}
# Dopo il Refactoring
Stats.calculate_stats_refactored([1, 2, 3])
# => {2.0, 6}
Come puoi vedere, l’output rimane lo stesso, ma ora abbiamo funzioni modulari che possono essere riutilizzate e testate indipendentemente.
Approfondimento
Il refactoring non è un concetto nuovo; è stato una parte cruciale della programmazione fin dai primi giorni dello sviluppo software. Opere importanti, come “Refactoring: Improving the Design of Existing Code” di Martin Fowler, forniscono pratiche fondamentali per il refactoring con intuizioni su quando e come applicarle.
Le alternative al refactoring manuale includono strumenti di analisi del codice automatizzati, che possono suggerire o addirittura eseguire il refactoring. Tuttavia, gli strumenti automatizzati potrebbero non comprendere sempre il contesto completo del codice e possono perdere sottigliezze che un revisore umano coglierebbe.
I dettagli implementativi in Elixir specificatamente includono la comprensione del paradigma funzionale e l’uso di pattern matching, clausole di guardia e l’operatore pipe per scrivere codice chiaro e conciso. Ad esempio, il refactoring spesso implica la conversione di funzioni complesse in stile imperativo in funzioni più piccole e componibili che seguono la preferenza di Elixir per l’immutabilità e le operazioni prive di effetti collaterali.
Vedi Anche
Per maggiori informazioni sulle tecniche di refactoring specifiche di Elixir:
- Guide ufficiali di Elixir
- “Refactoring: Improving the Design of Existing Code” di Martin Fowler, per principi generali che possono essere applicati a Elixir.
- Credo, uno strumento di analisi del codice statico per Elixir che incoraggia le migliori pratiche.
- Exercism Elixir Track, per esercizi pratici che spesso implicano il refactoring.