Ruby:
Refaktoryzacja
Jak to zrobić:
Przejdźmy przez przykład refaktoryzacji metody Ruby, która oblicza sumę kwadratów.
Przed refaktoryzacją:
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]) # Wyjście: 14
Po refaktoryzacji:
def sum_of_squares(numbers)
numbers.map { |number| number**2 }.sum
end
puts sum_of_squares([1, 2, 3]) # Wyjście: 14
Zrefaktoryzowana wersja używa Ruby Enumerable, by wyrazić tę samą logikę bardziej zwięźle i jasno. Metoda map
transformuje każdy element, a sum
agreguje ich wartości, usuwając potrzebę ręcznego zarządzania pętlą i przypisywania zmiennych.
W pogłębieniu
Refaktoryzacja ma bogate kontekst historyczny, sięgający wczesnych praktyk w rozwoju oprogramowania. Wstępne wzmianki można prześledzić do lat 90., z istotnymi wkładami Martina Fowlera w jego książce “Refactoring: Improving the Design of Existing Code”, gdzie dostarcza katalog wzorców dla refaktoryzacji. Od tego czasu, refaktoryzacja stała się kamieniem węgielnym praktyk zwinnych.
Kiedy mówimy o alternatywach dla refaktoryzacji, musimy rozważyć inne podejścia takie jak ‘Przepisanie’, gdzie zastępujesz stary system częściowo lub całkowicie lub dostosowujesz praktyki takie jak ‘Code Reviews’ i ‘Programowanie Parami’, aby stopniowo poprawiać jakość kodu. Jednakże, nie są one zamiennikami dla refaktoryzacji; uzupełniają proces.
Pod kątem implementacji, Ruby oferuje doskonałą i ekspresyjną składnię, która często skutkuje krótszym, bardziej czytelnym kodem po refaktoryzacji. Kluczowe zasady obejmują DRY (Don’t Repeat Yourself), używanie znaczących nazw, utrzymywanie metod krótkich i skupionych na jednym zadaniu oraz efektywne wykorzystanie modułu Enumerable Ruby, jak widać w powyższym przykładzie. Automatyzowane narzędzia, takie jak RuboCop, mogą również pomóc programistom zidentyfikować miejsca w kodzie, które mogłyby skorzystać z refaktoryzacji.
Zobacz także
Aby zagłębić się w refaktoryzację w Ruby, sprawdź te zasoby:
- Fundamentalna książka Martina Fowlera: Refactoring: Improving the Design of Existing Code
- Przewodnik stylu Ruby dla pisania czystszego kodu: Ruby Style Guide
- RuboCop, statyczny analizator kodu (linter) i formater: Repozytorium GitHub RuboCop