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-ых и был популяризирован книгой Мартина Фаулера “Рефакторинг: Улучшение проектирования существующего кода”. В Lua рефакторинг часто включает в себя упрощение сложных условий, разбиение больших функций на меньшие и оптимизацию использования таблиц для улучшения производительности.
Рефакторинг в Lua имеет свои особенности; динамичная природа Lua и гибкая типизация могут сделать некоторые рефакторинги, такие как переименование переменных или изменение сигнатур функций, более рискованными, если они не выполняются осторожно. Инструменты для статического анализа кода (например, luacheck) могут снизить такие риски. Альтернативы включают разработку, управляемую тестированием (TDD), где код непрерывно рефакторится как неотъемлемая часть процесса разработки, в отличие от отдельной фазы рефакторинга.
Смотрите также
- “Programming in Lua” Роберто Иерусалимщика для лучших практик и примеров.
- “Рефакторинг: Улучшение проектирования существующего кода” Мартина Фаулера для принципов, применимых в разных языках.
- Директория LuaRocks (https://luarocks.org/) для инструментов и модулей, направленных на поддержание и рефакторинг кода Lua.