Lua:
Refactorización

Cómo hacerlo:

Tomemos una función simple de Lua y la refactorizamos. Comenzamos con una función que calcula la suma de números en una lista pero está escrita sin mucha consideración por la eficiencia o claridad:

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})) -- Salida: 10

Refactorizar a una versión más eficiente y legible:

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})) -- Todavía salida: 10

La versión refactorizada elimina el bucle interno redundante, utilizando ipairs para iterar a través de la lista de manera limpia.

Análisis Profundo

Históricamente, la refactorización proviene de la comunidad de programación de Smalltalk a finales de los 80 y fue popularizada por el libro de Martin Fowler ‘Refactoring: Improving the Design of Existing Code’. En Lua, refactorizar a menudo implica simplificar condicionales complejos, desglosar funciones grandes en más pequeñas y optimizar el uso de tablas para mejorar el rendimiento.

Refactorizar en Lua tiene sus advertencias; la naturaleza dinámica de Lua y la tipificación flexible pueden hacer que ciertas refactorizaciones, como renombrar variables o cambiar firmas de funciones, sean más arriesgadas si no se hacen con precaución. Herramientas para el análisis estático de código (como luacheck) pueden reducir tales riesgos. Alternativas incluyen el desarrollo guiado por pruebas (TDD), donde el código se refactoriza continuamente como una parte integral del proceso de desarrollo, en contraste con una fase de refactorización separada.

Ver También

  • “Programming in Lua” de Roberto Ierusalimschy para mejores prácticas y ejemplos.
  • “Refactoring: Improving the Design of Existing Code” de Martin Fowler para principios aplicables a través de lenguajes.
  • Directorio LuaRocks (https://luarocks.org/) para herramientas y módulos destinados a mantener y refactorizar el código de Lua.