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: 10Refaktoryzacja 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: 10Zrefaktoryzowana 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.