Lua:
Refactoring

Wie:

Nehmen wir eine einfache Lua-Funktion und refaktorisieren sie. Wir beginnen mit einer Funktion, die die Summe der Zahlen in einer Liste berechnet, die aber ohne viel Gedanken an Effizienz oder Klarheit geschrieben wurde:

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

Refaktorisierung zu einer effizienteren und lesbareren Version:

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})) -- Gibt immer noch aus: 10

Die überarbeitete Version entfernt die überflüssige innere Schleife und verwendet ipairs, um sauber durch die Liste zu iterieren.

Tiefergehend

Historisch gesehen kommt Refactoring aus der Smalltalk-Programmiergemeinschaft Ende der 80er Jahre und wurde durch Martin Fowlers Buch ‘Refactoring: Improving the Design of Existing Code’ popularisiert. Bei Lua beinhaltet Refactoring oft das Vereinfachen komplexer Bedingungen, das Aufteilen großer Funktionen in kleinere und das Optimieren der Tabellennutzung, um die Leistung zu verbessern.

Refactoring in Lua hat seine Tücken; Luas dynamische Natur und flexible Typisierung können bestimmte Refactorings, wie das Umbenennen von Variablen oder das Ändern von Funktionssignaturen, riskant machen, wenn sie nicht vorsichtig durchgeführt werden. Werkzeuge für die statische Codeanalyse (wie luacheck) können solche Risiken mindern. Alternativen umfassen testgetriebene Entwicklung (TDD), bei der der Code kontinuierlich als integraler Bestandteil des Entwicklungsprozesses refaktorisiert wird, im Gegensatz zu einer separaten Refactoring-Phase.

Siehe auch

  • “Programming in Lua” von Roberto Ierusalimschy für bewährte Praktiken und Beispiele.
  • “Refactoring: Improving the Design of Existing Code” von Martin Fowler für Prinzipien, die sprachübergreifend anwendbar sind.
  • LuaRocks-Verzeichnis (https://luarocks.org/) für Werkzeuge und Module, die auf die Wartung und das Refactoring von Lua-Code abzielen.