Lua:
Rifattorizzazione

Come fare:

Prendiamo una semplice funzione Lua e rifattorizziamola. Cominciamo con una funzione che calcola la somma dei numeri in una lista, ma è scritta senza prestare molta attenzione all’efficienza o alla chiarezza:

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

Rifattorizzare in una versione più efficiente e leggibile:

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

La versione rifattorizzata elimina il ciclo interno ridondante, utilizzando ipairs per iterare la lista in modo pulito.

Approfondimento

Storicamente, il refactoring proviene dalla comunità di programmazione Smalltalk alla fine degli anni ‘80 ed è stato reso popolare dal libro di Martin Fowler ‘Refactoring: migliorare il design del codice esistente’. In Lua, il refactoring spesso implica la semplificazione di condizioni complesse, la suddivisione di funzioni grandi in più piccole, e l’ottimizzazione dell’uso delle tabelle per migliorare le prestazioni.

Il refactoring in Lua ha le sue avvertenze; la natura dinamica di Lua e la sua tipizzazione flessibile possono rendere certi refactor, come rinominare variabili o cambiare firme di funzione, più rischiosi se non eseguiti con cautela. Strumenti per l’analisi statica del codice (come luacheck) possono ridurre tali rischi. Le alternative includono lo sviluppo guidato dai test (TDD), dove il codice viene continuamente rifattorizzato come parte integrante del processo di sviluppo, a differenza di una fase di refactoring separata.

Vedi anche

  • “Programming in Lua” di Roberto Ierusalimschy per le migliori pratiche ed esempi.
  • “Refactoring: Migliorare il design del codice esistente” di Martin Fowler per principi applicabili a diversi linguaggi.
  • Directory LuaRocks (https://luarocks.org/) per strumenti e moduli mirati alla manutenzione e al refactoring del codice Lua.