Variables
Fondamentalement, dans 4D, les données peuvent être stockées de deux manières. Les champs stockent les données sur disque, de manière permanente ; les variables stockent les données en mémoire, de manière temporaire.
Lorsque vous définissez votre base, vous indiquez à 4D les noms et les types de champs que vous voulez utiliser. C’est pratiquement la même chose pour les variables — vous leur donnez un nom et un type (cf. Type de données).
Une fois créée, vous pouvez utiliser une variable partout dans votre application. For example, you might need to store a text variable in a field of same type:
[MaTable]MonChamp:=MonTexte
Les variables sont des objets du langage; vous pouvez créer et utiliser des variables qui n’apparaîtront jamais à l'écran. Dans vos formulaires, vous pouvez afficher des variables à l’écran (à l'exception des pointeurs et des BLOB), les utiliser pour saisir des données, et les imprimer dans des états. Dans ces cas, elles se comportent exactement comme des champs, et les mêmes contrôles intégrés sont disponibles lorsque vous les créez . Les variables peuvent également servir à contrôler des boutons, des list box, des zones de défilement, des boutons image, etc., ou à afficher les résultats de calculs ne devant pas être sauvegardés.
Déclaration des variables
Vous créez des variables en les déclarant. Le langage 4D propose deux manières de déclarer des variables :
- à l'aide du mot-clé
var
(recommandé particulièrement si votre code utilise des objets et des classes), - à l'aide de l'une des commandes du langage 4D du thème "Compilateur" ou "Tableaux" (langage classique uniquement).
Note: Although it is usually not recommended, you can create basic variables simply by using them; you do not necessarily need to formally define them. For example, to declare a variable that will hold the current date plus 30 days, you can write:
MyDate:=Current date+30 //MyDate is created
// 4D guesses it is of date type
// and assigns the current date plus 30 days
var
keyword
Using the Declaring variables using the var
keyword is recommended since this syntax allows you to bind object variables with classes. Using this syntax enhances code editor suggestions and type-ahead features.
To declare a variable of any type with the var
keyword, use the following syntax:
var <varName>{; <varName2>;...}{ : <varType>}
Par exemple:
var $myText : Text //a text variable
var myDate1; myDate2 : Date //several date variables
var $myFile : 4D.File //a file class object variable
var $myVar //a variant variable
varName
is the variable name, it must comply with the 4D rules about identifiers.
This syntax only supports local and process variables declarations, thus excluding interprocess variables and arrays.
varType
can be:
- a basic type, in which case the variable contains a value of the declared type,
- a class reference (4D class or user class), in which case the variable contains a reference to an object of the defined class.
If varType
is omitted, a variable of the variant type is created.
Le tableau suivant répertorie toutes les valeurs varType
prises en charge :
varType | Contenu |
---|---|
Texte | Valeur texte |
Date | Valeur date |
Heure | Valeur Heure |
Booléen | Valeur booléen |
Entier long | Valeur entier long |
Réel | Valeur réel |
Pointeur | Valeur pointeur |
Image | Valeur image |
Blob | Valeur BLOB |
Collection | Valeur collection |
Variant | Valeur variant |
Objet | Objet avec classe par défaut (4D.object) |
4D.className | Objet du nom de la classe 4D |
cs.className | Objet du nom de la classe utilisateur |
Exemples
- To declare local and process basic variables:
var $myText; myText; $vt : Text
var myVar //variant
var $o : Object
//équivalent à :
var $o : 4D.Object
//également équivalent à C_OBJECT($o)
- To declare object variables of 4D class:
var $myFolder : 4D.Folder
var $myFile : 4D.File
- To declare object variables of user class:
var $myClass : cs.MyClass
var $dataclass : cs.Employee
var $entity : cs.EmployeeEntity
Using a C_ directive
Note de compatibilité : cette fonctionnalité n'est pas recommandée pour déclarer des variables dans des méthodes. Il est recommandé d'utiliser le mot-clé var.
Directives from the "Compiler" theme commands allow you to declare variables of basic types.
Par exemple, si vous souhaitez définir une variable de type texte, il suffira d'écrire :
C_TEXT(monTexte)
Voici quelques déclarations de variables simples :
C_BLOB(vxMyBlob) // The process variable vxMyBlob is declared as a variable of type BLOB
C_DATE($vdCurDate) // The local variable $vdCurDate is declared as a variable of type Date
C_LONGINT(vg1;vg2;vg3) // The 3 process variables vg1, vg2 and vg3 are declared as variables of type longint
C_OBJECT($vObj) // The local variable $vObj is declared as a variable of type Object
C_COLLECTION($vCol) // The local variable $vCol is declared as a variable of type Collection
Note: Arrays are a particular type of variables (an array is an ordered series of variables of the same type). Arrays are declared with specific commands, such as ARRAY LONGINT(alAnArray;10)
. Pour plus d'informations, veuillez consulter le thème Tableaux.
Assigner des valeurs
Vous pouvez donner des valeurs aux variables ou aux tableaux et/ou récupérer leur valeur. Donner une valeur à une variable s’appelle assigner une valeur (ou affecter une valeur) et s’effectue à l’aide de l’opérateur d’assignation (:=). L’opérateur d’assignation est également utilisé pour assigner des valeurs aux champs.
L’opérateur d’assignation est un premier moyen pour créer une variable et lui donner une valeur. Vous placez le nom de la variable que vous voulez créer à gauche de l’opérateur. Par exemple:
MonNombre:=3
crée la variable MonNombre et lui donne la valeur numérique 3. Si MonNombre existait déjà, elle prend simplement la valeur 3.
It is usually not recommended to create variables without declaring their type.
Bien entendu, les variables ne seraient pas très utiles si vous ne pouviez pas récupérer les valeurs qu’elles contiennent. De nouveau, vous utilisez l’opérateur d’assignation. Si vous devez placer la valeur de MonNombre dans un champ nommé [Produits]Taille, il vous suffit de placer MonNombre à droite de l’opérateur d’assignation :
[Produits]Taille:=MonNombre
Dans ce cas, [Produits]Taille vaudrait 3. Cet exemple est plutôt simple, mais il illustre le moyen élémentaire dont vous disposez pour transférer des données d’un objet vers un autre en utilisant le langage.
Vous assignez des valeurs aux éléments du tableau à l'aide d'accolades ({...}) :
atNoms{1}:="Richard"
Variables locales, process et interprocess
Vous pouvez créer trois types de variables : des variables locales, des variables process et des variables interprocess. La différence entre ces trois types de variables est leur portée, ou les objets pour lesquels elles sont disponibles.
Variables locales
Une variable locale, comme son nom l’indique, est locale à une méthode — c’est-à-dire accessible uniquement à l’intérieur de la méthode dans laquelle elle a été créée et inaccessible à l’extérieur de cette méthode. Le fait d'être local à une méthode est formellement qualifié de «portée locale». Les variables locales sont utilisées pour restreindre une variable afin qu'elle ne fonctionne que dans la méthode.
- Eviter des conflits de noms avec les autres variables
- Utiliser temporairement des valeurs,
- Réduire le nombre de variables process
Le nom d’une variable locale commence toujours par le signe dollar ($) et peut contenir jusqu’à 31 autres caractères. Si vous saisissez un nom plus long, 4D le tronque pour le ramener à 31 caractères.
Lorsque vous développez un projet d'application comportant de nombreuses méthodes et variables, il arrive souvent que vous n’ayez besoin d’utiliser une variable que dans une méthode. Vous pouvez alors créer et utiliser une variable locale, sans devoir vous soucier de l’existence d’une autre variable du même nom ailleurs dans la base.
Souvent, dans une application, des informations ponctuelles sont demandées à l’utilisateur. The Request
command can obtain this information. Elle affiche une boîte de dialogue comportant un message demandant à l’utilisateur de répondre et, lorsque la réponse est validée, la retourne. Généralement, il n’est pas nécessaire de conserver cette information très longtemps dans vos méthodes. C’est l’endroit parfait pour utiliser une variable locale. Voici un exemple :
$vsID:=Request("Saisissez votre numéro d'identification :")
If(OK=1)
QUERY([Personnes];[Personnes]ID=$vsID)
End if
Cette méthode demande simplement à l’utilisateur de saisir un numéro d’identification. La réponse est placée dans une variable locale, $vsID, puis la méthode la recherche parmi les champs [Personnes]ID. Une fois la méthode terminée, la variable locale $vsID est effacée de la mémoire. Ce fonctionnement est bien adapté puisque la variable n’est utile qu’une seule fois et dans cette méthode uniquement.
Note : les paramètres $1, $2 etc. passés aux méthodes sont des variables locales. Pour plus d'informations, veuillez consulter le thème Paramètres.
Variables process
Une variable process est “visible” uniquement dans le process où elle a été créée. Elle est utilisable par toutes les méthodes du process et toutes les méthodes appelées depuis le process.
Le nom d’une variable process ne comporte aucun préfixe. Ce nom peut contenir jusqu’à 31 caractères.
En mode interprété, les variables sont gérées dynamiquement; elles sont créées et effacées de la mémoire «à la volée». En mode compilé, tous les process que vous créez (process utilisateur) partagent la même définition de variables process, mais chaque process a une instance différente pour chaque variable. Par exemple, la variable maVar est une certaine variable dans le process P_1 et une autre variable dans le process P_2.
Un process peut lire et écrire des variables process dans un autre process à l'aide des commandes LIRE VARIABLE PROCESS
et ECRIRE VARIABLE PROCESS
. Nous vous recommandons de n'utiliser ces commandes que dans le cadre des besoins décrits ci-dessous (qui sont les raisons pour lesquelles ces commandes ont été créées dans 4D) :
- Communication interprocess à des endroits particuliers de votre code
- Gestion du glisser-déposer interprocess
- En client/serveur, communication entre les process sur les postes clients et les procédures stockées exécutées sur le serveur
Pour plus d'informations, reportez-vous à la section Process et à la description de ces commandes.
Variables interprocess
Les variables interprocess sont visibles dans tout le projet et sont disponibles pour tous les process. Les variables interprocess sont principalement utilisées pour le partage d’informations entre les process.
L'utilisation de variables interprocess n'est pas recommandée car elles ne sont pas disponibles depuis le process préemptif et peuvent rendre le code moins maintenable.
Le nom d’une variable interprocess débute toujours par le symbole (<>) — formé du symbole “inférieur à” suivi du symbole “supérieur à” — et peut comporter jusqu’à 31 caractères supplémentaires.
En mode client/serveur, chaque poste (client et serveur) partage la même définition des variables interprocess, mais chacun utilise une instance différente d'une variable.