Benutzer-Werkzeuge

Webseiten-Werkzeuge


scripting:tutorials:level1:readable_code

Gut lesbare Skripte

Bevor wir die Grundlagen der Lua-Programmierung abschließen und zu unserer Karte zurückkehren, wollen wir noch einige Richtlinien geben, die dabei helfen, Skripte übersichtlicher zu machen.

Die Übersichtlichkeit eines Skriptes hilft nicht nur dir selbst, Fehler schneller zu finden oder nach längerer Abwesenheit vorige Gedankengänge nachvollziehen zu können. In unserer Community kann jederzeit nach Hilfestellung bezüglich eines Skriptes gefragt werden, wenn man mal nicht weiter kommt. Diejenigen, die dein Skript zusammen mit dir verbessern wollen, müssen aber zuerst dein Programm verstehen. Dabei hilft es immens, sich an ein paar Konventionen zu halten, um diesen Prozess zu beschleunigen und effizienter zu gestalten.


Benutze korrekte Formatierung

In allen unseren Beispielen ist jeder innere Block zum äußeren ein Stück eingerückt, um zu signalisieren, dass an dieser Stelle eine neue Kontrollstruktur beginnt. Skripte, die nicht eingerückt sind, sind deutlich schwieriger zu lesen.

Auch sollte jede Instruktion in einer neuen Zeile stehen, sodass man genau erkennt, was nacheinander passiert.

Illustrativ „verwurschteln“ wir mal den Euklidischen Algorithmus zur Berechnung des größten gemeinsamen Teilers:

function GreatestCommonDivisor(_A, _B)
if _A == 0 then return _B else
while _B ~= 0 do
if _A > _B then
_A = _A - _B else _B = _B - _A
end end end
return _A
end

Auch das wird funktionieren. Es reduziert aber maßgeblich die Lesbarkeit. Vergleiche noch einmal mit der korrekt formatierten Version:

function GreatestCommonDivisor(_A, _B)
    if _A == 0 then
        return _B
    else
        while _B ~= 0 do
            if _A > _B then
                _A = _A - _B
            else
                _B = _B - _A
            end
        end
    end
    return _A
end

Es wird auf einen Blick ersichtlich, wie die Verzweigungen und Schleifen angeordnet sind. Selbst wenn das zu Beginn nicht direkt einleuchtend ist, sei dir versichert, dass dir jeder erfahrene Programmierer dankbar sein wird, wenn du deinen Code korrekt formatierst.

Visual Studio Code rückt den Code normalerweise selbstständig ein. Sollte das nicht der Fall sein, kannst du händisch mit der Tabulator-Taste nach rechts einrücken. Nach links wird mit Shift+Tab eingerückt. Beide Shortcuts funktionieren auch, wenn mehrere Zeilen markiert sind. Dadurch wird jede markierte Zeile entweder nach rechts oder links eingerückt.

Falls du „versehentlich“ mal schlecht formatierten Code geschrieben hast, kannst du ihn auch komplett markieren und mit Rechtsklick → „Format Selection“ automatisch formatieren lassen. Das funktioniert sogar mit dem hoffnungslos zerstörten Code weiter oben.


Verwende aussagekräftige Variablennamen

Die Namen von Variablen und Funktionen sollen aussagekräftig sein und schon beim Lesen verraten, was in ihnen gespeichert ist. Viele, die mit dem Programmieren beginnen, wollen ihre Variablennamen möglichst kurz halten. Für diejenigen, die Hilfestellung leisten sollen, ergibt sich dann folgende Situation:

var_p.jpg

Des Weiteren ist die Sprache im Skript Englisch. Vermeide es, auf Deutsch zu programmieren.

Wenn du beispielsweise mehrere Truppen in einem Banditenlager benennen willst, nenne sie nicht blt1, blt2, usw. (Banditenlager Truppe 1, 2, …). Namen wie BanditCampTroop1, BanditCampTroop2, usw. sind viel aussagekräftiger und direkt lesbar. Falls es sehr viele Truppen werden, bietet sich auch die Verwendung eines Tables an: BanditCampTroop[1], BanditCampTroop[2], usw.

Lange Namen sind nicht automatisch aussagekräftig. Angenommen, du willst nach einem Tribut ein Tor öffnen. Die zugehörige Funktion mit dem Namen ActionAfterTributePaid sagt deutlich weniger aus als OpenGate. Es ist viel leichter, sich in einem Skript zurechtzufinden, in dem alles einen maximal konkreten Namen hat.


Setze Kommentare

Kommentare werden nicht vom Spiel ausgeführt, sondern erlauben die Verwendung von Freitext im Skript.

-- Ich bin nicht Teil des Codes, ich putze hier nur

Bei Kommentaren bist du völlig frei, wie du sie benutzen möchtest. Es gibt einige Anwendungsfälle:

  • Erklärung, was eine Funktion tut und wie/warum sie funktioniert
  • Notizen dazu, wie eine Karte ablaufen soll
  • Gedächtnisstützen, wo noch eine Funktion oder ein Briefing fehlt, um es später einzufügen

Wichtig ist nur, dass du von ihnen Gebrauch machst. Gerade zu Beginn ist es nicht verkehrt, sich mit Kommentaren bei Verzweigungen oder Schleifen klar zu machen, welche Logik gerade implementiert wird und ob das mit der gewünschten Logik übereinstimmt.
Es hilft auch, sich über bestimmten Funktionen zu notieren, unter welchen Umständen sie aufgerufen werden sollen und was genau sie machen. So eine Stütze kann man später mit dem tatsächlich implementierten Ablauf vergleichen und dadurch schneller Fehler finden.

-- Diese Funktion wird aufgerufen, nachdem der Spieler Dovbars Tribut bezahlt hat
-- Sie öffnet das Tor im Nordwesten, hinter dem der Weg zu Kerberos liegt
function OpenGateKerberos()
    -- In Ebene 2 des Tutorials gibt es eine Anleitung dazu, wie Tore geöffnet werden
end
scripting/tutorials/level1/readable_code.txt · Zuletzt geändert: 2023/05/29 14:26 von fritz_98