DEFINE FUNCTION

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

This document covers the following topics:

For an explanation of the symbols used in the syntax diagram, see Syntax Symbols.

Related Statement: DEFINE PROTOTYPE


Function

The DEFINE FUNCTION statement is used to create a user-defined function within a Natural object of type function. A function object may contain only one DEFINE FUNCTION statement, which defines the function name, the function result, the parameters and the programming code forming the operation logic.

For further information, see the following sections in the Programming Guide:

Syntax Description

Syntax Element Description
function-name
Function Name:

function-name is the symbolic identifier used to call the function.

The name has to follow the same rules which apply for user-defined variables, see Naming Conventions for User-Defined Variables. This means the name has to start with a letter or a hash (#), and its maximum length is 32 characters.

You may not use the same function name twice in one library.

return-data-definition
Return Data Definition Clause:

For details on this clause, see Return Data Definition.

function-data-definition
Function Data Definition Clause:

For details on this clause, see Function Data Definition.

statement...
Statement(s) to be Executed:

Defines the operation section which is executed when the function is called. It forms the function logic.

END-FUNCTION
End of DEFINE FUNCTION Statement:

The Natural reserved word END-FUNCTION must be used to terminate the DEFINE FUNCTION statement.

Return Data Definition

  RETURNS [variable-name]  

(format-length[/array-definition])

  [BY VALUE]  
[(array-definition)] HANDLE OF

dialog-element-type
OBJECT

(

A

[/array-definition]) DYNAMIC
U
B

The return-data-definition clause defines the format/length and, if applicable, the array structure of the result value returned by the function.

Syntax Element Description:

Syntax Element Description
variable-name
Return Value Name:

Optionally, you may specify a name which is used to access the return field within the function coding. If no such name is specified, the function name is used instead.

format-length
Format/Length Definition:

The format and length of the result field.

For information on format/length definition of user-defined variables, see Format and Length of User-Defined Variables in the Programming Guide.

array-definition
Array Dimension Definition:

With array-definition, you define the lower and upper bounds of a dimension in an array-definition, if the function result is an array field.

For further information, see DEFINE DATA statement, Array Dimension Definition.

HANDLE OF dialog-element-type
Dialog Element Type:

The type of dialog element. Its possible values are the values of the TYPE attribute.

HANDLE OF OBJECT
Handle of Object:

Used in conjunction with NaturalX.

For further information, see NaturalX in the Programming Guide.

A, U or B
Data Type:

Alphanumeric (A), Unicode (U) or binary (B) for a dynamic result.

DYNAMIC
Dynamic Variable:

The function result may be defined as DYNAMIC.

For information on processing dynamic variables, see Introduction to Dynamic Variables and Fields in the Programming Guide.

BY VALUE
BY VALUE Option:

If BY VALUE is specified, the format/length of the "sending" field (defined inside the return-data-definition clause) and the "receiving" field (which receives the result at the place where the function is called) must only be transfer compatible.

The format/length of the "receiving" field is either

  • defined via an explicit (IR=) option in the function call; or

  • defined with a DEFINE PROTOTYPE statement; or

  • taken over from the RETURNS field of the function object, which must already exist.

For data transfer compatibility the rules outlined in Rules for Arithmetic Assignment and Data Transfer in the Programming Guide apply.

If BY VALUE is not specified, the format and length of the "receiving" field must exactly match the characteristics of the "sending" field.

Function Data Definition

DEFINE DATA                

PARAMETER

USING parameter-data-area
parameter-data-definition

   

LOCAL

USING

local-data-area
parameter-data-area

data-definition  
[INDEPENDENT AIV-data-definition ]
END-DEFINE              

The function-data-definition clause defines the parameters which are to be provided when the function is called, and the data fields used by the function, such as local and independent variables.

Syntax Element Description:

Syntax Element Description
USING parameter-data-area
PDA Name:

The name of the parameter-data-area that contains data elements which are used as parameters in a function call.

See also Defining Parameter Data in the DEFINE DATA statement description.

parameter-data-definition
Direct Parameter Data Definition:

Instead of defining a parameter data area, parameter data can also be defined directly within a function call.

See also Direct Parameter Data Definition in the DEFINE DATA statement description.

USING local-data-area
LDA Name:

Specify the name of the local data area (LDA) to be referenced.

See also Defining Local Data in the DEFINE DATA statement description.

USING parameter-data-area
PDA Name:

Specify the name of a parameter data area (PDA).

Note:
A data area referenced with DEFINE DATA LOCAL may also be a parameter data area (PDA). By using a PDA as an LDA you can avoid the extra effort of creating an LDA that has the same structure as the PDA.

See also Defining Local Data in the DEFINE DATA statement description.

data-definition
Direct Data Definition:

For information on how to define elements or fields within the statement itself, that is, without using an LDA or PDA, see the section Direct Data Definition in the DEFINE DATA statement description.

INDEPENDENT AIV-data-definition
AIV Data Definition:

Can be used to define a single or multiple application-independent variables (AIVs).

See Defining Application-Independent Variables in the DEFINE DATA statement description.

END-DEFINE
End of Clause:

The Natural reserved word END-DEFINE must be used to end the function-data-definition clause.

Examples

Example 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

The function F#FIRST-CHAR is used in the example program DPTEX2 in library SYSEXSYN. See Examples in the DEFINE PROTOTYPE statement description.

Example 2 - DEFINE FUNCTION with Result Value 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

The function F#FACTOR is used in the example program DPTEX1 in library SYSEXSYN. See Examples in the DEFINE PROTOTYPE statement description.