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.