DEFINE FUNCTION

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

Dieses Dokument behandelt folgende Themen:

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:

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]  

../graphics/cbo5b.gif

(format-length[/array-definition])

../graphics/cbc5b.gif

  [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

** 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.