Lua:
Refactoring : Mode d'emploi

Comment faire :

Prenons une simple fonction Lua et refactorisons-la. Nous commençons avec une fonction qui calcule la somme des nombres dans une liste mais est écrite sans beaucoup de souci pour l’efficacité ou la clarté :

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

Refactoriser pour une version plus efficace et lisible :

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

La version refactorisée supprime la boucle intérieure redondante, en utilisant ipairs pour parcourir la liste de manière propre.

Plongée profonde

Historiquement, le refactoring provient de la communauté de programmation Smalltalk à la fin des années 80 et a été popularisé par le livre de Martin Fowler ‘Refactoring: Improving the Design of Existing Code’. En Lua, refactoriser implique souvent de simplifier les conditionnelles complexes, de décomposer les grandes fonctions en fonctions plus petites, et d’optimiser l’utilisation des tables pour améliorer la performance.

Refactoriser en Lua a ses mises en garde ; la nature dynamique de Lua et le typage flexible peuvent rendre certains refactorings, comme renommer des variables ou changer les signatures de fonction, plus risqués si ce n’est pas fait avec prudence. Les outils d’analyse de code statique (comme luacheck) peuvent atténuer ces risques. Les alternatives incluent le développement piloté par les tests (TDD), où le code est continuellement refactorisé comme une partie intégrante du processus de développement, contrairement à une phase de refactoring séparée.

Voir aussi

  • “Programming in Lua” par Roberto Ierusalimschy pour les meilleures pratiques et exemples.
  • “Refactoring: Improving the Design of Existing Code” par Martin Fowler pour les principes applicables à travers les langages.
  • Annuaire LuaRocks (https://luarocks.org/) pour les outils et modules visant à maintenir et refactoriser le code Lua.