Lua:
Refaktoryzacja
Jak to zrobić:
Weźmy prostą funkcję Lua i dokonajmy jej refaktoryzacji. Zaczynamy od funkcji, która oblicza sumę liczb w liście, ale została napisana bez większego zastanowienia nad wydajnością czy jasnością:
function sumList(numbers)
local result = 0
for i=1, #numbers do
for j=1, #numbers do
if i == j then
result = result + numbers[i]
end
end
end
return result
end
print(sumList({1, 2, 3, 4})) -- Wyświetla: 10
Refaktoryzacja do wersji bardziej wydajnej i czytelnej:
function sumListRefactored(numbers)
local result = 0
for _, value in ipairs(numbers) do
result = result + value
end
return result
end
print(sumListRefactored({1, 2, 3, 4})) -- Nadal wyświetla: 10
Zrefaktoryzowana wersja pozbywa się zbędnego wewnętrznego pętli, używając ipairs
do czystego iterowania przez listę.
Wnikliwe spojrzenie
Historycznie rzecz biorąc, refaktoryzacja wywodzi się ze społeczności programistycznej Smalltalk na koniec lat 80. i została spopularyzowana przez książkę Martina Fowlera ‘Refaktoryzacja: Ulepszanie struktury istniejącego kodu’. W Lua, refaktoryzacja często obejmuje upraszczanie złożonych warunków, dzielenie dużych funkcji na mniejsze, oraz optymalizację użycia tabel w celu poprawy wydajności.
Refaktoryzacja w Lua ma swoje pułapki; dynamiczna natura Lua i elastyczne typowanie mogą czynić pewne refaktoryzacje, jak zmiana nazw zmiennych czy sygnatur funkcji, ryzykownymi, jeśli nie są wykonywane ostrożnie. Narzędzia do statycznej analizy kodu (jak luacheck
) mogą zmniejszyć takie ryzyko. Alternatywy obejmują rozwój oparty na testach (TDD), gdzie kod jest ciągle refaktoryzowany jako integralna część procesu deweloperskiego, w przeciwieństwie do osobnej fazy refaktoryzacji.
Zobacz również
- “Programowanie w Lua” autorstwa Roberta Ierusalimschy’ego dla najlepszych praktyk i przykładów.
- “Refaktoryzacja: Ulepszanie struktury istniejącego kodu” autorstwa Martina Fowlera dla zasad stosowanych w różnych językach.
- Katalog LuaRocks (https://luarocks.org/) dla narzędzi i modułów skierowanych na utrzymanie i refaktoryzację kodu Lua.