Ruby:
Refaktorisering

Hur man gör:

Låt oss gå igenom ett exempel på refaktorisering av en Ruby-metod som beräknar summan av kvadrater.

Före refaktorisering:

def sum_of_squares(numbers)
  sum = 0
  numbers.each do |number|
    square = number * number
    sum += square
  end
  sum
end

puts sum_of_squares([1, 2, 3])  # Output: 14

Efter refaktorisering:

def sum_of_squares(numbers)
  numbers.map { |number| number**2 }.sum
end

puts sum_of_squares([1, 2, 3])  # Output: 14

Den refaktoriserade versionen använder Ruby:s Enumerables för att uttrycka samma logik på ett mer koncist och klart sätt. map-metoden transformerar varje element, och sum aggregerar deras värden, vilket eliminerar behovet av manuell loop-hantering och variabeltilldelning.

Djupdykning

Refaktorisering har en rik historisk kontext, som går tillbaka till de tidiga metoderna i mjukvaruutveckling. De första omnämnandena kan spåras tillbaka till 1990-talet, med betydande bidrag från Martin Fowler i hans bok “Refactoring: Improving the Design of Existing Code”, där han tillhandahåller en katalog av mönster för refaktorisering. Sedan dess har refaktorisering blivit en hörnsten i agila utvecklingspraxis.

När vi pratar om alternativ till refaktorisering måste vi antingen överväga en annan inställning som ‘Omskrivning’, där du ersätter det gamla systemet delvis eller helt eller anpassa praxis som ‘Kodgranskningar’ och ‘Parprogrammering’ för att gradvis förbättra kodkvaliteten. Dock är dessa inte ersättningar för refaktorisering; de kompletterar processen.

När det gäller implementering erbjuder Ruby en utmärkt och uttrycksfull syntax som ofta resulterar i kortare, mer läsbar kod efter refaktorisering. Nyckelprinciper inkluderar DRY (Don’t Repeat Yourself), att använda meningsfulla namn, att hålla metoder korta och fokuserade på en enstaka uppgift, och att använda Rubys Enumerable-modul effektivt, som sett i exemplet ovan. Automatiserade verktyg som RuboCop kan också hjälpa programmerare att identifiera punkter i koden som skulle kunna dra nytta av refaktorisering.

Se även

För att fördjupa dig i refaktorisering i Ruby, kolla in dessa resurser: