Lua:
Рефакторинг
Як робити:
Давайте візьмемо просту функцію Lua і рефакторимо її. Починаємо з функції, яка обчислює суму чисел у списку, але написана без особливих думок про ефективність чи ясність:
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})) -- Виведе: 10
Рефакторимо до більш ефективної і читабельної версії:
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})) -- Досі виведе: 10
У виправленій версії ми позбуваємося зайвого внутрішнього циклу, використовуючи ipairs
для чистого перебору списку.
Поглиблене розглядання
Історично, рефакторинг прийшов від спільноти програмування Smalltalk наприкінці 80-х і став популярним завдяки книзі Мартіна Фаулера “Refactoring: Improving the Design of Existing Code”. У Lua, рефакторинг часто включає спрощення складних умовних виразів, розбиття великих функцій на менші, та оптимізацію використання таблиць для покращення продуктивності.
Рефакторинг в Lua має свої пастки; динамічна природа Lua та гнучка типізація можуть зробити деякі рефакторинги, як-от перейменування змінних або зміна сигнатур функцій, ризикованішими, якщо вони не виконуються обережно. Інструменти для статичного аналізу коду (як-от luacheck
) можуть зменшити такі ризики. Альтернативи включають розробку, засновану на тестуванні (TDD), де код постійно рефакториться як невід’ємна частина процесу розробки, на відміну від окремої фази рефакторингу.
Дивіться також
- “Programming in Lua” Роберто Єрусалімського для кращих практик та прикладів.
- “Refactoring: Improving the Design of Existing Code” Мартіна Фаулера для принципів, що застосовуються в усіх мовах.
- Директорія LuaRocks (https://luarocks.org/) для інструментів та модулів, спрямованих на підтримку та рефакторинг коду Lua.