Navigation

La syntaxe de base du langage DI#

Vous trouverez dans cet article toute la documentation pour comprendre le langage de programmation de Dialog Insight (Syntaxe, personnalisation, opérateurs, expressions conditionnelles, etc.) que vous pouvez utiliser dans la programmation d'un courriel HTML ou Drag n Drop. 

Ressources


La syntaxe de base

Les balises DI#

Lorsque notre compilateur traite du code, il cherche les balises d'ouverture et de fermeture suivantes [[ et ]] qui délimitent le code qu'il doit interpréter. Tout ce qui se trouve en dehors des balises ouvrantes / fermantes de DI# est ignoré. À l’intérieur de ces balises, il est possible de ne pas interpréter de code afin d’afficher un simple texte. Pour cela, il suffit d’utiliser la méthode output.write(…); 

Notez qu’un raccourci existe afin d’afficher du texte lorsqu’il s’agit de la seule instruction à exécuter entre les crochets : [[=… ;]]

Le code suivant [[="texte";]] 
est un raccourci pour [[output.write("texte");]]

Échappement du HTML

Tout ce qui se trouve en dehors d'une paire de balises ouvrantes/fermantes est ignoré par le compilateur, ce qui permet d'avoir du code DI# mixant les contenus. Ceci permet à DI# d'être contenu dans des documents HTML, pour créer par exemple des templates.

<p>Ceci sera ignoré par le compilateur</p>
[[="Alors que ceci sera analysé par le compilateur de DI";]]
<p>Ceci sera aussi ignoré par le compilateur et affiché au navigateur.</p>

OU

<p>Ceci sera ignoré par le compilateur et affiché dans le navigateur.</p>
[[output.write("Alors que ceci sera analysé par le compilateur de DI");]]</p>
<p>Ceci sera aussi ignoré par le compilateur et affiché au navigateur.</p>
// Exemple 1 d'échappement avancé en utilisant des conditions
[[if(a > b){]]
Ceci sera affiché si l'expression est vraie.

[[} else {]]
    
Sinon, ceci sera affiché.
[[}]] 

// Exemple 2 d'échappement avancé en utilisant des conditions
[[
if(a > b)
{
output.write(
"Ceci sera affiché si l'expression est vraie.");
}
else
{
output.write(
"Sinon, ceci sera affiché.");
}
]]

Dans cet exemple, le compilateur va ignorer les blocs où la condition n'est pas remplie, même s’ils sont en dehors des balises ouvrantes/fermantes de DI#. Tout le code contenu dans la condition else ne sera donc jamais interprété puisque l'interpréteur DI# va passer les blocs contenant ce qui n'est pas rempli par la condition.

Séparation des instructions

Comme en C#, en Perl ou en PHP, DI# requiert que les instructions soient terminées par un point-virgule à la fin de chaque instruction. Aucune balise fermante n’implique de fin d’instructions, le point-virgule est obligatoire.

Les commentaires

Le DI# supporte deux types de commentaires :

  1. Les commentaires sur une seule ligne : Pour commenter jusqu'à la fin de la ligne du bloc PHP courant. Ceci signifie que toute le code HTML après // sera ignorée jusqu’à la fin de la ligne.
  2. Les commentaires multilignes : Pour commenter un bloc d’instruction en commençant par /* et en finissant par */. Tout ce qui est inclus entre ces deux balises sera ignoré.

Portée des variables (scope)

La portée d'une variable dépend du contexte dans lequel la variable est définie. Une variable définie à la racine du code aura une portée sur la totalité du script. Mais, une variable définie dans une fonction sera locale à la fonction. Autrement dit, toute variable créée à une portée limitée à sa propre fonction, ainsi qu’à ses fonctions sous-jacentes.

[[  
int x = 123; // portée globale
string MyFunction(string value)
{
int y = 456; // portée locale
x = x + 1; // utilisation possible d'une variable globale dans la fonction
}
]]

Le contexte est quant à lui délimité par { et }. Ainsi, la déclaration d’une variable à l’intérieur de ces accolades, en fera une variable locale.


Les fonctions

Déclaration

Une fonction DI# se déclare de la même façon qu'en C.

[Type] [Nom] ([Paramètre1], [Paramètre2], etc.)
{
Instructions...
}

Les fonctions doivent être définies à la racine du template, c’est-à-dire qu’elles ne peuvent pas être définies à l’intérieur d’un scope.

// Exemple d’une déclaration classique, avec valeur de retour définie  
int addNumbers (int x, int y)
{
return x + y;
}
// Exemple d’une déclaration avec une valeur par défaut 
void OutputWithHTMLTag (string value, string Tag = "B")
{
if (value is null)
return;
Output.write("<" + Tag + ">" + value + ">");
}

Notes :

  • Une fonction peut retourner n’importe quel type (string, int, decimal, etc.). Dans ce cas, la fonction doit nécessairement retourner une valeur. Cette valeur doit être obligatoirement du même type que le retour attendu par la fonction.
  • Une fonction peut aussi être déclarée de type void. Dans ce cas, la fonction est utilisable comme simple instruction. L’exécution de cette fonction doit se terminer par un « return » (sans valeur de retour) ou bien atteindre la fin de la fonction.  

Appel

Une fonction s’appelle comme dans tous les autres langages :
nomDeLaFonction(params)     OU     nomDeLaFonction()

Une fonction peut être utilisée comme statement/commande dans le script, par exemple :
OutputWithTags("mon texte", "i"); 

Les fonctions qui retournent une valeur (c'est-à-dire toutes les fonctions dont le type n’est pas void) peuvent aussi être utilisées en tant qu’expression ou valeur :
int x = addNumbers(1,1);

Portée des variables

Comme dans de nombreux langages, les variables créées à l’intérieur d’une fonction (les variables locales) ne sont pas visibles à l’extérieur de cette fonction. Les variables créées à l’extérieur de cette fonction ne quant à elles, pas accessible de l’intérieur de cette fonction.


Cette réponse a-t-elle été utile ? Oui Non

Envoyer vos commentaires
Désolés de n'avoir pu vous être utile. Aidez-nous à améliorer cet article en nous faisant part de vos commentaires.