Value permet de déclarer les arguments d'un sous-programme en spécifiant qu'ils sont passés par valeur.
Value mot_type liste_var_dim
Elément | Description | Restrictions |
mot_type | Un des mots-clés utilisés pour les déclarations : | Ce doit être un type de données d'Adonix. |
liste_var_dim | Liste de var_dim séparées par le caractère ','. | Aucune. |
var_dim | Variable exprimée sous l'une des formes suivantes : | Aucune. |
nom_var | nom_de_variable. | Aucune. |
liste_sep | Liste de séparateurs ',' ( la place prise habituellement par l'expression des dimensions reste vide, seul le nombre de dimensions est ainsi déclaré ). | Pas plus de 3 séparateurs car le nombre de dimensions est limité à 4. |
# Déclaration d'arguments d'un Call
Subprog SOUS_TRAIT(ARGUMENT1, ARGUMENT2, ARGUMENT3)
Value Integer ARGUMENT1(,,) :# ARGUMENT1 est un tableau à 3 dimensions
Value Char ARGUMENT2()(,) :# ARGUMENT2 est un tableau à 2 dimensions
Value Char ARGUMENT3()() :# ARGUMENT3 est un tableau de chaînes de caractères
Value Date ARGUMENT4 :# ARGUMENT4 est une date (sans dimension)
Value permet de déclarer que les arguments d'un sous-programme sont passés par valeur, c'est-à-dire recopiés dans une variable locale créée au moment du Call. Les modifications faites sur cette variable ne seront donc pas affectées aux variables passées en argument de l'instruction Call.
Un ordre Value est automatiquement fait pour les arguments d'un sous-programme non déclarés dans ce sous-programme, lorsque ces arguments sont des expressions (lorsque ce sont des variables, un ordre Const est fait).
Si on veut pouvoir passer des expressions comme paramètres, il faudra obligatoirement les déclarer de type Value (ou ne pas les déclarer du tout).
Lorsqu'on ne précise pas l'indice de départ pour un tableau passé en argument, celui commence à l'indice 0, même si dans le traitement appelant, il est déclaré commençant par un autre indice. Exemple :
# Appel des sous-programmes
Local Char ARGUMENT(30)(1..6)
Call SOUS_TRAIT0
Call SOUS_TRAIT1
Subprog SOUS_TRAIT0(ARGUMENT)
Value Char ARGUMENT()() :# tableau commençant à l'indice 0
Subprog SOUS_TRAIT1(ARGUMENT)
Value Char ARGUMENT()(1..) :# tableau commençant à l'indice 1
Le passage de paramètres par valeur pourra prendre du temps et de la place mémoire dans le cas de tableaux qui auraient une taille importante car ils sont recopiés lors d'un ordre Value.