DEFINE FUNCTION

#### Search Results

Search

# DEFINE FUNCTION

`DEFINE FUNCTION` function-name
[return-data-definition]
[function-data-definition]
statement...
`END-FUNCTION`

Dieses Dokument behandelt folgende Themen:

- Funktion

- Syntax-Beschreibung

- Beispiele

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.

Verwandtes Statement: `DEFINE PROTOTYPE`

## Funktion

Mit dem `DEFINE FUNCTION`-Statement können Sie eine benutzerdefinierte Funktion erstellen, die als ein Objekt des Typs Function gespeichert wird. Eine Function kann nur ein `DEFINE FUNCTION`-Statement enthalten.

Mit dem `DEFINE FUNCTION`-Statement wird der Name der Funktion, die Parameter, die lokalen und die anwendungsunabhängigen Variablen, das Ergebnis der Funktion und die Statements, die die Operationslogik bilden, definiert.

Weitere Informationen siehe folgende Abschnitte im Leitfaden zur Programmierung:

- Natural-Objekttyp Function

- Function Call

## Syntax-Beschreibung

Syntax-Element | Beschreibung
--- | ---
`function-name` | Name der Funktion: `function-name` ist der Name der aufzurufenden Funktion. Dabei gelten die im Kapitel Namenskonventionen für Benutzervariablen im Dokument Natural benutzen aufgeführten Regeln. `function-name` ist nicht notwendigerweise der gleiche Name wie der Name des gespeicherten Objekts, das die Definition der Function enthält. Sie dürfen denselben Funktionsnamen nicht zweimal in einer Library benutzen
`return-data-definition` | Informationen zu dieser Klausel siehe Rückgabedatendefinition weiter unten.
`function-data-definition` | Informationen zu dieser Klausel siehe Funktionsdatendefinition weiter unten.
`statement...` | Auszuführende(s) Statement(s): Definiert die Operation(en), die ausgeführt werden sool(en), wenn die Function aufgerufen wird. Bildet die Function-Logik.
`END-FUNCTION` | Ende des DEFINE FUNCTION-Statement: Das für Natural reservierte Wort `END-FUNCTION` muss zum Beenden des `DEFINE FUNCTION`-Statements benutzt werden.

### Rückgabedatendefinition

(`return-data-definition`)

`RETURNS` [variable-name] |  | (format-length[/array-definition]) |  | [`BY VALUE`]
[(array-definition)] `HANDLE OF OBJECT`
( |  | `A` |  | [/array-definition]) | `DYNAMIC`
`U`
`B`

Mit dieser Klausel wird das Format, die Länge und, falls zutreffend, die Array-Struktur des Ergebniswertes festgelegt, der von der Funktion zurückgegeben wird.

Syntax-Element-Beschreibung:

Syntax-Element | Beschreibung
--- | ---
`variable-name` | Name des Rückgabewerts: Hier kann optional ein Name angegeben werden, der benutzt werden kann, um auf das Rückgabefeld im Kode der Funktion zuzugreifen. Falls Sie keinen Namen angeben, wird der stattdessen der Name der Function verwendet.
`format-length` | Format-/Länge-Definition: Format und Länge des Ergebnisfeldes. Weitere Informationen siehe Format und Länge von Benutzervariablen im Leitfaden zur Programmierung.
`array-definition` | Definition der Array-Dimensionen: Falls das Ergebnisfeld ein Array-Feld ist, legen Sie hier die untere und obere Grenze einer Dimension fest. Weitere Informationen siehe `DEFINE DATA`-Statement, Definition von Array-Dimensionen.
`HANDLE OF OBJECT` | Object-Handle: Wird bei NaturalX verwendet. Weitere Informationen siehe NaturalX im Programming Guide.
`A`, `U` or `B` | Datentyp: Alphanumerisch (A), Unicode (U) oder binär (B) für ein dynamisches Ergebnis.
`DYNAMIC` | Dynamische Variable: Das Function-Ergebnis kann als `DYNAMIC` definiert werden. Weitere Informationen siehe Dynamische Variablen im Leitfaden zur Programmierung.
`BY VALUE` | BY VALUE-Option: Wenn Sie `BY VALUE` angeben, müssen das Format und die Länge des "sendenden" Feldes (definiert in der return-data-definition-Klausel) und des "empfangenden" Feldes (welches das Ergebnis der Function an der Stelle erhält, wo die Function aufgerufen wird) nur übertragungskompatibel sein. Das Format und die Länge des "empfangenden" Felds werden wie folgt definiert: entweder über eine explizite `(IR=)`-Klausel im Function Call oder mit einem `DEFINE PROTOTYPE`-Statement oder vom `RETURNS`-Feld des Function-Objekts übernommen, das schon existieren muss. Bezüglich der Datenübertragungskompatibilität gelten die Regeln in den Abschnitten Regeln für arithmetische Operationen und Kompatibilitätsregeln zur Datenübertragung im Leitfaden zur Programmierung. Wenn Sie `BY VALUE` nicht angeben, müssen das Format und die Länge des "empfangenden" Feldes exalt mit den Eigenschaften des "sendenden" Feldes übereinstimmen.

### Funktionsdatendefinition

(`function-data-definition`)

`DEFINE DATA`
| `PARAMETER` |  | `USING` parameter-data-area parameter-data-definition |  |  |  |
| `LOCAL` |  | `USING` |  | local-data-area parameter-data-area |  |  |  |
local-data-definition |
[`INDEPENDENT` aiv-data-definition ]
`END-DEFINE`

Mit dieser Klausel werden die Parameter, die beim Aufrufen der Function mitgegeben werden sollen, und die von der Function benutzten Datenfelder festgelegt, zum Beispiel lokale Variable und anwendungsunabhängige Variable. Eine Global Data Area (GDA) kann nicht innerhalb der Function-Definition referenziert werden.

Syntax-Element-Beschreibung:

Syntax-Element | Beschreibung
--- | ---
`PARAMETER USING parameter-data-area` | PDA-Name: Der Name der Parameter Data Area (PDA), die Datenelemente enthält, die als Parameter in einem Function Call benutzt werden. Siehe auch Definition von Parameter Data in der `DEFINE DATA`-Statement-Beschreibung.
`PARAMETER parameter-data-definition` | Parameterdatendefinition: Anstatt eine Parameter Data Area zu definieren, können Sie Parameter auch direkt in einem Function Call definieren. Siehe auch Definition von Parameterdaten in der `DEFINE DATA`-Statement-Beschreibung.
`LOCAL USING local-data-area` | LDA-Name: Geben Sie den Namen der zu referenzierenden Local Data Area (LDA) an. Siehe auch Definition von Local Data in der `DEFINE DATA`-Statement-Beschreibung.
`LOCAL USING parameter-data-area` | PDA-Name: Geben Sie den Namen der zu referenzierenden Parameter Data Area (PDA) an. Anmerkung Eine mit `DEFINE DATA LOCAL` referenzierte Data Area kann auch eine Parameter Data Area (PDA) sein. Durch Benutzung einer PDA als LDA können Sie sich die zusätzliche Mühe sparen, eine LDA zu erstellen, die dieselbe Struktur wie die PDA hat. Siehe auch Definition von Local Data in der `DEFINE DATA`-Statement-Beschreibung.
`LOCAL local-data-definition` | Lokale Daten-Definition: Informationen, wie Sie Elemente oder Felder innerhalb des Statements selbst definieren können, das heisst, ohne dazu eine LDA oder eine PDA zu benutzen, finden Sie im Abschnitt Lokale Daten-Definition in der `DEFINE DATA`-Statement-Beschreibung.
`INDEPENDENT aiv-data-definition` | AIV-Daten-Definition: Hier können Sie eine oder mehrere anwendungsunabhängige Variablen angeben. Siehe Definition von anwendungsunabhängigen Variablen in der `DEFINE DATA`-Statement-Beschreibung.
`END-DEFINE` | Ende der Klausel: Das für Natural reservierte Wort `END-DEFINE` muss zum Beenden der `function-data-definition`-Klausel benutzt werden.

## Beispiele

- Beispiel 1 - DEFINE FUNCTION

- Beispiel 2 - DEFINE FUNCTION mit Ergebniswert-Array

### Beispiel 1 - DEFINE FUNCTION

    ** Example 'DFUEX1': DEFINE FUNCTION
    ************************************************************************
    DEFINE FUNCTION F#FIRST-CHAR
      RETURNS #RESULT (A1)
      DEFINE DATA PARAMETER
        1 #PARM (A10)
      END-DEFINE
      /*
      #RESULT := #PARM        /* First character as return value.
    END-FUNCTION
    *
    END

Die Funktion `F#FIRST-CHAR` wird in dem Beispielprogramm `DPTEX2` in der Library `SYSEXSYN` verwendet. Siehe Beispiele in der `DEFINE PROTOTYPE`-Statement-Beschreibung.

### Beispiel 2 - DEFINE FUNCTION mit Ergebniswert-Array

    ** Example 'DFUEX2': DEFINE FUNCTION
    ************************************************************************
    DEFINE FUNCTION F#FACTOR
      RETURNS (I2/1:3)
      DEFINE DATA PARAMETER
        1 #VALUE (I2)
      END-DEFINE
      /*
      F#FACTOR(1) := #VALUE * 1
      F#FACTOR(2) := #VALUE * 2
      F#FACTOR(3) := #VALUE * 3
      /*
    END-FUNCTION
    *
    END

Die Funktion `F#FACTOR` wird in dem Beispielprogramm `DPTEX1` in der Library `SYSEXSYN` verwendet. Siehe Beispiele in der `DEFINE PROTOTYPE`-Statement-Beschreibung.

### On this page

- Funktion
- Syntax-Beschreibung
- Beispiele