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.