API Basic Goto de - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

GoTo / label:

ClassicUO • Basic

GoTo springt zu einer benannten Marke in der aktuellen Prozedur oder Funktion. Eine Marke bezeichnet eine Codestelle, keine aufrufbare Prozedur. Für normalen Kontrollfluss eignen sich If, Schleifen und Return.

Genaue Syntax

GoTo label
label:

Parameter

  • label — Bezeichner, der als label: in einer eigenen Zeile derselben Prozedur steht. GoTo label ohne Anführungszeichen, Klammern oder Doppelpunkt nach dem Ziel schreiben. Vorwärts- und Rückwärtssprünge funktionieren ohne Beachtung der Großschreibung. Andere Prozeduren dürfen denselben Markennamen haben. Punkte sind erlaubt, machen daraus aber kein Modulmitglied. Zahlen, berechnete Ausdrücke und Marken anderer Prozeduren werden als Ziele nicht unterstützt.

Rückgabewert

GoTo und label: liefern keinen Wert, auch kein 1/0 oder TRUE/FALSE. Die Beispiele liefern mit Return aus Main die selbst berechneten Integer -1, 6 und 123.

Verhalten

  • Die Vorbereitung speichert Markenadressen und löst Sprünge nach dem Lesen der gesamten Prozedur auf. Die Ausführung nutzt die fertige Adresse ohne erneute Textsuche. Variablenwerte bleiben erhalten; frühere Aktionen werden nicht rückgängig gemacht.
  • Unbekanntes Ziel: SC009, der Client verhindert den Start. Doppelte Marke innerhalb einer Prozedur, auch bei anderer Großschreibung: SC021 vor der Initialisierung. Include behält ursprüngliche Datei und Fehlerzeile. Überzählige Zeichen können Warnungen auslösen; genaue Syntax verwenden.
  • Beim Verlassen aktiver Try-Blöcke laufen deren Finally-Blöcke von innen nach außen vor dem Ziel. Ein Sprung innerhalb desselben aktiven Try erhält den Block. Ein Fehler in Finally kann das Erreichen des Ziels verhindern.
  • Schleifen und Try/Catch/Finally über ihren normalen Anfang betreten. Ein Sprung in die Mitte stellt übersprungene Initialisierung und Laufzeitkontexte nicht wieder her und ist keine unterstützte Fortsetzung. Für Schleifen Continue oder Exit verwenden.
  • Rückwärtssprünge haben weder automatische Versuchszahl noch Zeitlimit oder Wartezeit. Die Abbruchbedingung ausdrücklich ändern. Normaler Ablauf läuft ebenfalls durch Marken; unerwünschte Abschnitte überspringen oder Return verwenden. Fehlerbehandlung wird durch On Error eingerichtet.

Beispiele

1. Vorwärts verzweigen

# amount=0 wählt NoItems und result=-1; anschließend liefert Finished den Wert -1. Bei amount=4 setzt der normale Pfad 40 und GoTo Finished überspringt NoItems. Beide Marken gehören zu Main und sind keine Aufrufe.
Option Explicit On
Sub Main()
    Var amount = 0
    Var result = 0
    If amount <= 0 Then
        GoTo NoItems
    End If
    result = amount * 10
    GoTo Finished
NoItems:
    result = -1
Finished:
    Return result
End Sub

Erläuterung der Parameter und Ausführung:

amount=0 wählt NoItems und result=-1; anschließend liefert Finished den Wert -1. Bei amount=4 setzt der normale Pfad 40 und GoTo Finished überspringt NoItems. Beide Marken gehören zu Main und sind keine Aufrufe.

2. Begrenzt wiederholen

# attempt beginnt bei 0 und steigt vor der Prüfung. Again und again bezeichnen dieselbe Marke. Drei Durchgänge addieren 1, 2 und 3; danach ist attempt<3 falsch und Return liefert 6. total wird vor der Marke initialisiert und beim Sprung nicht zurückgesetzt.
Option Explicit On
Sub Main()
    Var attempt = 0
    Var total = 0
Again:
    attempt += 1
    total += attempt
    If attempt < 3 Then
        GoTo again
    End If
    Return total
End Sub

Erläuterung der Parameter und Ausführung:

attempt beginnt bei 0 und steigt vor der Prüfung. Again und again bezeichnen dieselbe Marke. Drei Durchgänge addieren 1, 2 und 3; danach ist attempt<3 falsch und Return liefert 6. total wird vor der Marke initialisiert und beim Sprung nicht zurückgesetzt.

3. Verschachtelte Try verlassen

# trace wird 1; GoTo Finished überspringt trace=99. Das innere Finally hängt Ziffer 2 an, das äußere Ziffer 3. Erst dann wird Finished erreicht und 123 zurückgegeben. Jeder Finally-Block läuft für diesen Sprung einmal.
Option Explicit On
Sub Main()
    Var trace = 0
    Try
        Try
            trace = trace * 10 + 1
            GoTo Finished
            trace = 99
        Finally
            trace = trace * 10 + 2
        End Try
    Finally
        trace = trace * 10 + 3
    End Try
Finished:
    Return trace
End Sub

Erläuterung der Parameter und Ausführung:

trace wird 1; GoTo Finished überspringt trace=99. Das innere Finally hängt Ziffer 2 an, das äußere Ziffer 3. Erst dann wird Finished erreicht und 123 zurückgegeben. Jeder Finally-Block läuft für diesen Sprung einmal.


en · ru · uk · fr · de · it · es · zh-tw · ja · ko

Basic