Nel sorgente X/script è possibile definire un proprio tipo di dati, formalmente noto come oggetto.
Un oggetto può contenere attributi (qualsiasi tipo di variabile, compresi i dati definiti dall'utente) e metodi (dichiarati come funzioni all'interno dell'oggetto stesso).
Prototipo di oggetto
Gli oggetti non possono essere prototipati come funzioni: devono essere dichiarati prima di poter essere utilizzati.
Dichiarazione dell'oggetto
Un oggetto viene dichiarato utilizzando la parola chiave object.
OBJECT <objname> ... [<attributes>] ... [<methods>] END[OBJECT] |
---|
Dove:
•<objname> è il nome dell'oggetto, quindi viene utilizzato come tipo di dati utente.
•<attributes> dichiarazioni di attributi.
•<methods> dichiarazioni dei metodi.
Nota: gli attributi e i metodi devono essere dichiarati prima dell'uso di qualsiasi metodo inline, altrimenti l'ordine di dichiarazione non è importante.
Dichiarazione degli attributi
Le dichiarazioni di attributo sono come le dichiarazioni di variabili, ma hanno un ambito solo nell'oggetto stesso. La sintassi generale è:
[INTERNAL] <type> <variable> [, < variable> ...] |
---|
La parola chiave speciale internal significa, se usata, che la variabile è di sola lettura e non può essere scritta da nessuno.
Dichiarazione dei metodi
La dichiarazione dei metodi è molto simile a quella delle funzioni (con qualche differenza di sintassi) e può essere di due tipi: prototipo e dichiarazione in linea.
Per la prototipazione si utilizza la seguente sintassi (per maggiori dettagli si veda la voce prototipo di funzione ):
CODE <name> ([<argument>, ... ]) [:<result>] CODE ASSIGNABLE <name> ([<argument>, ...]): <type> |
---|
Quando si dichiara un metodo in linea, utilizzare la seguente sintassi (vedere la dichiarazione di funzioni per maggiori dettagli):
INLINE <name> ([<argument>, ... ]) [:<result>] ... [RETURN <value>] END[INLINE] |
---|
e quando si dichiarano metodi assegnabili in linea:
INLINE ASSIGNABLE <name> ([<argument>, ... ]) [:<type>] ... END[INLINE] |
---|
Prototype implementation
Qualsiasi metodo prototipato in un oggetto deve essere dichiarato al di fuori della dichiarazione dell'oggetto, con la seguente sintassi:
CODE <objname>.<name> ([<argument>, ... ]) [:<result>] ... [RETURN <value>] END[CODE] |
---|
e con la seguente sintassi per i metodi assegnabili:
CODE ASSIGNABLE <objname>.<name> ([<argument>, ... ]) [:<type>] ... END[CODE] |
---|
Nota: i metodi inline non hanno un'implementazione, poiché è già stata fatta nella dichiarazione dell'oggetto.
Internal methods declaration
As internal function declaration, you can prototype internal methods, with the following syntax:
INTERNAL <id> <name> ([<argument>, ... ]) [:<result>] INTERNAL <id> ASSIGNABLE <name> ([<argument>, ...]): <type> |
---|
ATTENZIONE: non definite mai un metodo interno senza sapere bene cosa state facendo. Potreste causare seri danni e crash al sistema e perdere dati importanti. or files.