Einführung in Funktionen
Funktionen sind grundlegende Einheiten in EGL-Logikabschnitten.
Eine Funktion enthält eine Reihe von EGL-Anweisungen. Mit Ausnahme von eigenständigen Funktionen handelt es sich bei Funktionen nicht um EGL-Abschnitte. Funktionen enthalten entweder den ersten ausführbaren Code im Programm oder werden von einer anderen Funktion aufgerufen.
Der Name main() ist für die übergeordnete Funktion reserviert, die beim Starten oder Aufrufen eines Programms zuerst ausgeführt wird. Jeder Programmabschnitt muss eine Funktion namens main() ohne Parameter oder Rückgabetyp enthalten.
- Verweisparameter zeigen auf eine Position, an der ein Wert gespeichert ist (siehe Referenzvariablen).
- Wertparameter enthalten den eigentlichen Wert.
Eine dynamische Feldgruppe ist ein Beispiel für eine Verweisvariable.
- const gibt an, dass ein Eingabeargument als Konstante behandelt wird.
- field gibt an, dass ein Text- oder Druckformularfeld an den Parameter übergeben wird.
- in, out und inout schließen sich gegenseitig aus. Sie geben an, ob es sich um einen Eingabeparameter, einen Ausgabeparameter oder einen Ein-/Ausgabeparameter handelt.
- sqlNullable wird ausschließlich für Code verwendet, der aus VisualAge Generator migriert wurde, und gibt an, dass ein Argument (bei Verwendung für den Datenbankzugriff) Null sein kann.
Informationen zur Funktionssyntax und zu Parameteränderungswerten finden Sie unter Funktionen.
Überladene Funktionen
Eine überladene Funktion besitzt mehrere Funktionssignaturen für einen einzigen Funktionsnamen. Die Signatur einer Funktion ist die Kombination aus dem Namen der Funktion mit der Anzahl und dem Typ ihrer Parameter. Der Rückgabewert der Funktion ist nicht Bestandteil der Signatur. Wenn mehrere Funktionen denselben Namen besitzen, ordnet EGL einem Funktionsaufruf mithilfe der Signatur einen Funktionscode zu. EGL lässt nicht zu, dass zwei Funktionen dieselbe Signatur besitzen.
sysLib.audit(record BasicRecord in)
sysLib.audit(record BasicRecord in, jid SMALLINT in)
mathLib.abs(inputVar SMALLINT)
mathLib.abs(inputVar INT)
mathLib.abs(inputVar BIGINT)
- Die Funktion kann keine eigenständige Funktion sein.
- Die überladenen Funktionen müssen sich in demselben Abschnitt befinden. Falls zwei Abschnitte Funktionen desselben Namens enthalten, können Sie selbst dann keinen nicht qualifizierten Verweis auf diesen Funktionsnamen verwenden, wenn die Funktionen unterschiedliche Signaturen besitzen.
- Da die Funktionssignatur den Rückgabewert nicht enthält, können zwei Funktionen nicht bis auf den Rückgabewert identisch sein.
- EGL sucht im aktuellen Geltungsbereich nach allen Funktionen mit übereinstimmenden Namen.
- Falls EGL übereinstimmende Funktionsnamen in mehreren Containern (also Logikabschnitten) findet, zeigt der Generator einen Fehler aufgrund eines mehrdeutigen Verweises an.
- Stimmt die Anzahl der Parameter bei mehreren Funktionen überein, fährt EGL mit Schritt 4 fort. Stimmt die Anzahl bei keiner Funktion überein, zeigt der Generator einen Fehler aufgrund ungültiger Argumente an.
- EGL sucht nach einer Funktion mit Parametern, die mit den Typen der Argumente im Funktionsaufruf übereinstimmen. Wird keine Übereinstimmung festgestellt, fährt EGL mit Schritt 5 fort. EGL kann nicht mehrere übereinstimmende Funktionen finden, da dies einen Gültigkeitsfehler verursacht.
- EGL sucht nach einer Funktion mit Parametern, die für die Argumente im Funktionsaufruf zuordnungskompatibel sind. Wird keine Übereinstimmung gefunden, zeigt der Generator einen Fehler aufgrund ungültiger Argumente an. Wenn mehrere Übereinstimmungen festgestellt werden, sucht EGL nach der besten Übereinstimmung. Beispiel: Falls das Argument den Typ SMALLINT hat und EGL zwei Funktionen (eine mit einem Parameter des Typs INT und die andere mit einem Parameter des Typs BIGINT), wählt EGL die Funktion mit dem Parameter des Typs INT aus, weil INT eine ähnlichere Größe wie SMALLINT aufweist. Kann EGL keine Übereinstimmung finden, zeigt der Generator einen Fehler aufgrund eines mehrdeutigen Verweises an.