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.