4D v14.3Utilisation des directives de compilation |
|||||||||||||||||||||||||||
|
4D v14.3
Utilisation des directives de compilation
Utilisation des directives de compilation
4D utilise trois catégories de variables :
Pour plus d'informations sur ce point, reportez-vous à la section Variables. Les variables process et les variables interprocess sont structurellement de même nature pour le compilateur. Toutes les variables ont un type. Comme décrit dans la section Types de données, vous disposez de 13 types pour les variables simples :
Pour les variables de type Tableau, vous disposez des types suivants :
Notes : Lorsque vous travaillez avec 4D en mode interprété, une variable peut avoir plusieurs types. Cette tolérance se justifie parfaitement puisque vous êtes en mode interprété. En effet, à chaque ligne de code, 4D interprète l’instruction et comprend le contexte. La manière d’opérer du compilateur est la suivante :
Si le compilateur trouve un même nom de variable avec deux types différents, il n’a aucune raison de privilégier l’un par rapport à l’autre. En d’autres termes, avant de pouvoir ranger un objet, de lui donner une adresse mémoire, le compilateur a besoin de connaître l’identité exacte de cet objet, c’est-à-dire son nom et son type, le type permettant au compilateur de déduire sa taille. Ainsi, pour chaque application compilée, le compilateur crée un plan, contenant, pour chaque variable, son nom (ou identificateur), son emplacement (ou adresse mémoire) et la taille qu’elle occupe (représentée par son type). Ce “plan” s’appelle la table de symboles. Une option des Préférences vous permet de générer ou non cette table sous forme de fichier lors de la compilation. Si vous voulez que le compilateur vérifie votre typage ou bien s’en charge lui-même, placer une directive de compilation est simple. Vous avez le choix entre deux possibilités, qui correspondent d’ailleurs à deux méthodes de travail :
Les directives de compilation sont utiles dans deux cas :
Par ailleurs, utiliser des directives de compilation peut vous permettre de réduire le temps de compilation. Il arrive que le compilateur ne puisse pas déduire le type d’une variable, et cela pour plusieurs raisons. Il est impossible de recenser tous les cas de figure. Une chose est certaine, c’est qu’en cas d’impossibilité à compiler, le compilateur vous en donnera la raison précise ainsi que les moyens d’y remédier. LaVariable:=Vrai LaVariable:="La lune est verte" Dans le cas où la méthode A est compilée avant la méthode B, le compilateur considérera que LaVariable:="La lune est verte" est un changement de type d’une variable précédemment rencontrée. Il vous signalera qu’il y a retypage. Il génère une erreur qu’il vous appartient de corriger. Ne vous inquiétez pas, le compilateur ne transformera pas votre variable LaVariable:="La lune est verte" en variable booléenne sans vous demander ce que vous en pensez ! L’ambiguïté sur une déduction forcéeIl peut arriver que le compilateur déduise un type sur un objet qui ne convient pas à son utilisation finale. Dans ce cas, vous devrez typer explicitement vos variables à l’aide des directives de compilation. Voici un exemple de cas d’ambiguïté lors de l’utilisation des listes de valeurs par défaut sur un objet : dans les formulaires, il est possible de spécifier une liste de valeurs par défaut pour les objets de type combo box, pop up menu, menu/liste déroulante, onglet, zone de défilement et liste déroulante à l’aide du bouton d’édition Valeurs (voir à ce sujet le manuel Mode Développement de 4D). Les valeurs par défaut sont automatiquement chargées dans un tableau dont le nom est le même que celui de l’objet. Dans le cas simple où l’objet n’est pas utilisé dans une méthode, le compilateur peut déduire son type sans ambiguïté et l’objet sera typé en tableau texte par défaut. En revanche, dans le cas où vous devez initialiser la position de votre tableau pour son affichage dans le formulaire, vous pouvez écrire les instructions suivantes dans la méthode formulaire : Au cas ou C’est dans ce cas que l’ambiguïté apparaît : lors de l’analyse des méthodes, le compilateur déduira par défaut le type Réel pour la variable MonPopUp. Dans ce cas très précis, vous devez explicitement déclarer le tableau dans une méthode compilateur ou dans la méthode formulaire : Au cas ou L’impossibilité totale de déduire un type
Cas des pointeurs LaVar1:=5,2(1) Bien que la ligne (2) définisse le type de la variable pointée par le pointeur LePointeur, LaVar2 n’est pas pour autant typée. Lors de la compilation, le compilateur peut reconnaître un pointeur, mais n’a aucun moyen de savoir sur quel type de variable il pointe. Il ne peut donc pas déduire le type de LaVar2 ; une directive de compilation du type C_REEL(LaVar2) est donc indispensable. Cas des commandes à syntaxe multiple Cas des commandes 4D ayant des paramètres optionnels de types différents Cas des méthodes appelées via un URL Si toutes les variables utilisées dans votre base sont explicitement déclarées, il n’est pas nécessaire que le compilateur refasse tout le typage. Dans ce cas, vous pouvez lui demander d’effectuer uniquement la phase de traduction de vos méthodes dans le chemin de compilation. Ainsi, vous économiserez environ 50 % du temps de compilation. Les directives de compilation peuvent vous aider à accélérer vos méthodes. Pour plus de précision à ce sujet, reportez-vous à la section Conseils d’optimisation. Pour nous en tenir à un exemple simple dans cette section de présentation, imaginez que vous incrémentiez un compteur. Si vous n’avez pas déclaré la variable, le compilateur considérera par défaut qu’elle est de type Numérique (ou réel). Si vous prenez soin de préciser qu’il s’agit d’un Entier, l’exécution de la base compilée sera plus satisfaisante. En effet, un Réel occupe, sur PC par exemple, 8 octets en mémoire alors que si vous choisissez un type limitatif, Entier ou Entier long, le compteur n’en occupera que 4. Il est bien évident que l’incrémentation d’un compteur de 8 octets est plus longue que celle d’un compteur de 4 octets. Vous avez deux possibilités selon que vous voulez que le compilateur vérifie ou non votre typage. Le compilateur doit respecter les critères d’identification des variables. V1:=Vrai le compilateur pourra en déduire que la variable V1 est de type Booléen. De même, si vous écrivez : V2:="Ceci est une phrase exemple" le compilateur en déduira que V2 est une variable de type Texte. V3:=V1 `V3 est du même type que V1 Le compilateur déduit également le type de vos variables d’après les appels aux commandes 4D et à vos propres méthodes. Si vous passez à une méthode un paramètre de type Booléen et un paramètre de type Date, le compilateur donnera le type Booléen et le type Date aux variables locales $1 et $2 de la méthode appelée. LeNombre:=4 le compilateur donnera à la variable LeNombre le type Réel, même si en toute rigueur la valeur 4 est entière. En d’autres termes, le compilateur n’exclut pas que dans d’autres occurrences de la variable, la valeur puisse être 4,5. Si vous ne voulez pas de cette interprétation générale, vous pouvez préciser vos choix : c’est l’objet de ce qu’on appelle les directives de compilation.
C_BOOLEEN(Var) Par cette directive, vous forcez le compilateur à créer une variable Var dont le type sera Booléen. Si vous voulez que le compilateur n’ait pas à vérifier votre typage, vous devez lui donner les clés de l’identification de ses objets. Note : La déclaration des paramètres des méthodes obéit à la syntaxe suivante : Directive (nom de méthode; param). Cette syntaxe n’est pas exécutable en mode interprété. Paramètres particuliers
C_ENTIER LONG($0) Les directives de compilation lèvent toute ambiguïté sur les types. L’exigence de rigueur ne se fait pas pour autant intolérance. C_ENTIER(vEntier) Le compilateur ne verra pas un conflit de types de nature à empêcher la compilation et prendra automatiquement en compte la partie entière arrondie du nombre affecté (3 au lieu de 2,6). |
PROPRIÉTÉS
Produit : 4D VOIR AUSSI
Conseils d’optimisation UTILISATION DE L'ARTICLE
4D - Langage ( 4D v14 R2) Hérité de : Utilisation des directives de compilation ( 4D v11 SQL Release 6) |
|||||||||||||||||||||||||