Nel file sorgente di X/script è possibile definire due tipi di funzioni utente: standard e assegnabili.
Le funzioni standard sono quelle comunemente utilizzate in qualsiasi linguaggio di programmazione, mentre le funzioni assegnabili sono funzioni speciali per X/script che possono essere utilizzate come lato sinistro in un codice di assegnazione.
Prototipi di funzione
Le funzioni possono essere opzionalmente prototipate, in modo da poter essere chiamate prima che siano effettivamente definite. Per prototipare le funzioni standard e assegnabili si usa la parola chiave forward con la seguente sintassi:
FORWARD <name> ([<argument>, ... ]) [:<result>] FORWARD ASSIGNABLE <name> ([<argument>, ...]): <type> |
---|
dove:
•<name> è il nome della funzione;
•<arguments> sono argomenti facoltativi della funzione;
•<result> è un tipo di dati di ritorno opzionale per la funzione standard;
•<type> è il tipo di dati di assegnazione per la funzione assegnabile.
Functions arguments are defined as:
<argtype>[<argname> [=<argdefault>]] |
---|
dove:
•<argtype> è il tipo di dati dell'argomento;
•<argname> nome opzionale dell'argomento;
•<argdefault> argomento opzionale Valore predefinito;
Dichiarazione di funzione
Per definire le funzioni standard si usa la parola chiave code con la seguente sintassi:
CODE <name> ([<argument>, ... ]) [:<result>] ... [RETURN <value>] END[CODE] |
---|
In modo molto simile si possono definire funzioni assegnabili:
CODE ASSIGNABLE <name> ([<argument>, ...]): <type><aname> ... END[CODE] |
---|
dove:
•<name> è il nome della funzione;
•<arguments> sono argomenti facoltativi della funzione;
•<result> è un tipo di dati di ritorno opzionale per le funzioni standard;
•<type> è il tipo di dati di assegnazione per una funzione assegnabile.
•<aname> è il nome dell'argomento dell'assegnazione (la variabile che ha ricevuto il risultato dell'espressione di destra dell'assegnazione).
•<value> è il valore di ritorno opzionale (necessario se la funzione definisce un <result> valido) utilizzato con l'istruzione RETURN.
Gli argomenti delle funzioni sono definiti come:
<argtype> <argname> [=<argdefault(*)>] |
---|
dove:
•<argtype> è il tipo di dati dell'argomento;
•<argname> nome dell'argomento;
•<argdefault> argomento opzionale Valore predefinito, può essere usato solo se la funzione non è mai stata prototipata prima.
Ricordare che:
•le funzioni assegnabili non possono avere un valore di ritorno.
•una funzione con tipo di risultato definito deve restituire un valore con l'istruzione RETURN.
•non si possono dichiarare funzioni annidate (ad esempio, dichiarare una funzione all'interno di una funzione)
•una funzione standard e una funzione assegnabile possono avere lo stesso nome
•le funzioni con lo stesso nome ma con argomenti diversi sono funzioni diverse.
Dichiarazione di funzioni interne
Le funzioni interne sono funzioni speciali da utilizzare solo per la dichiarazione dell'interfaccia VMI. La dichiarazione è molto simile a quella del prototipo, ma utilizza la parola chiave internal.
INTERNAL <id> <name> ([<argument>, ... ]) [:<result>] INTERNAL <id> ASSIGNABLE <name> ([<argument>, ...]): <type> |
---|
Dove <id> è il codice di identificazione interno dell'interfaccia VMI. Per gli altri parametri, vedere i prototipi di funzione.
Nella maggior parte dei casi di incorporazione di X/script, le dichiarazioni interne sono incorporate nel compilatore X/script stesso, quindi non è necessario includere file e la dichiarazione stessa è più sicura.
ATTENZIONE: non definire mai una funzione interna senza sapere bene cosa si sta facendo. Si possono causare gravi danni e crash al sistema e perdere dati o file importanti.