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.

Funktionsparameter entsprechen in Anzahl, Typ und Position den Argumenten, die Sie an eine Funktion übergeben. Es gibt zwei Arten von Parametern:

Eine dynamische Feldgruppe ist ein Beispiel für eine Verweisvariable.

Wenn Sie einen Parameter deklarieren, können Sie einen oder mehrere der folgenden Parameteränderungswerte angeben:

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.

Viele EGL-Systemfunktionen sind überladen. Beispiel: Sie rufen die Funktion sysLib.audit() mit einem oder zwei Parametern auf. Der zweite Parameter gibt eine Journal-ID an. Falls Sie die Funktion mit einem einzigen Parameter aufrufen, schreibt die Funktion Daten in das Systemjournal. Die beiden Funktionen haben die folgenden Signaturen:
sysLib.audit(record BasicRecord in)
sysLib.audit(record BasicRecord in, jid SMALLINT in)
In einem weiteren Beispiel akzeptiert die Funktion mathLib.abs() einen Bereich von numerischen Typen und gibt einen Wert zurück, dessen Typ mit dem Typ der Eingabe identisch ist. Dies erfordert für jeden numerischen Typ eine andere Signatur:
mathLib.abs(inputVar SMALLINT)
mathLib.abs(inputVar INT)
mathLib.abs(inputVar BIGINT)
Sie können überladene Funktionen erstellen, wenn die folgenden Voraussetzungen erfüllt sind:
  • 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.
Während der Generierung löst EGL Verweise auf nicht qualifizierte Funktionsnamen mithilfe der folgenden Regeln auf:
  1. EGL sucht im aktuellen Geltungsbereich nach allen Funktionen mit übereinstimmenden Namen.
  2. Falls EGL übereinstimmende Funktionsnamen in mehreren Containern (also Logikabschnitten) findet, zeigt der Generator einen Fehler aufgrund eines mehrdeutigen Verweises an.
  3. 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.
  4. 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.
  5. 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.

Feedback