Comme nous l’avons vu dans l’article précédent introduisant WinDev et tous ses outils, le WLangage est un langage de quatrième génération, ou encore « L4G ». Ces langages sont appelés ainsi car ils sont développés principalement pour être utilisés en relation directe avec des systèmes de gestion de bases de données : en effet, ils intègrent des méthodes ainsi que la gestion des requêtes (en SQL par exemple) pour interagir avec ceux-ci. WinDev possède donc son propre langage et l’environnement permet par exemple de créer des fenêtres dans lesquelles du code pourra être saisi.
Une des particularités du WLangage ? Celui-ci peut être saisi dans deux langues différentes : le français et l’anglais. Toutes les procédures en français (par exemple, iImprime) ont leur équivalent en anglais et du code copié/collé peut être directement retraduit par l’éditeur. Nous allons voir ensemble quelques éléments de code assez basiques.
Déclaration de variables
Tout d’abord, rappelons les principes de base de la portée des variables. Celles-ci peuvent être globales (pour tout le projet) ou locales (à une fenêtre, par exemple, ou par rapport à une procédure). Lorsqu’une variable est globale, elle peut être accédée depuis n’importe quel endroit : une fenêtre, une procédure locale, une procédure globale…
La déclaration ressemble à :
[nomVariable] est un(e) [type]
Ainsi, pour déclarer une chaîne ou un entier, il faut procéder de la manière suivante, et ce pour tous les autres types, tels que les tableaux ou les monétaires. Contrairement à beaucoup de langages, il n’existe pas de point-virgule pour délimiter la fin d’une ligne, et la charte de programmation de base impose, si elle est active, l’utilisation de préfixes :
sVarMaChaine est une chaîne nVarIndice est un entier
Procédures/fonctions
Dans WinDev, il existe aussi bien des fonctions que des procédures. Les fonctions se différencient des procédures par le fait qu’elles renvoient un objet ou une valeur (d’un certain type), alors que les procédures ne le font normalement pas. Cependant, dans les versions actuelles de WinDev, elles peuvent aussi renvoyer une valeur ce qui permet désormais de ne plus utiliser le mot-clé « FONCTION« .
PROCEDURE LP_maProcedure(param1, param2 = "valeur") // ... RENVOYER Faux
Les paramètres des procédures ne sont pas typés, le type étant reconnu dynamiquement par l’éditeur et lors de la compilation. Il est toutefois conseillé de typer ceux-ci. Des paramètres par défaut peuvent être définis, si on ne souhaite pas indiquer tous les paramètres à la fonction lors de l’appel. Cela devrait rappeler à certains les procédures du PL/SQL, dans Oracle.
Boucles et conditions
Il existe les mêmes conditions que dans beaucoup d’autres langages. Le célèbre « switch », que l’on utilise aussi bien en C ou en Java, apparait ici sous la forme d’un « SELON« . La boucle « while » est remplacée par « TANTQUE« , le « for » est lui remplacé par « POUR« . Toutes les boucles et conditions se terminent par le mot-clé « FIN« . Pour sortir prématurément d’une boucle, on peut aussi utiliser le mot-clé « SORTIR« .
SI (x = 0) ALORS // traitement SINON // traitement sinon FIN
Classes
La programmation orientée objet est aussi possible avec WinDev puisqu’on peut écrire des classes accompagnées de leurs procédures, objets, constructeurs… Lorsque l’on accède à une fonction d’un objet, il faudra écrire « monObjet.fonction()« . Si l’on veut accéder à une propriété d’un objet créé, on utilisera plutôt « monObjet..propriété« . Nous reviendrons sur ces éléments plus tard dans plusieurs autres articles. Les principes tels que l’encapsulation sont alors conservés !
Fonctions utiles
- Info() : affiche une boite de dialogue avec un message d’information et un bouton OK.
- OuiNon() : affiche une boite de dialogue avec une question et deux boutons : « Oui » et « Non ».
- Erreur() : affiche un message d’erreur Windows, qui est tout à fait personnalisable.
- Bip : déclenche un son, pour signaler une erreur par exemple.
- …
Comme vous pouvez vous en apercevoir nous avons à faire à un langage très riche qui peut aussi être employé pour redéfinir des propriétés de champs (la couleur de fond, la taille, le contenu…), effectuer des calculs, ou pour remplir des tables autrement qu’avec un fichier ou avec une requête. Nous verrons plus tard comment gérer le remplissage de celles-ci par programmation, ainsi que d’autres trucs et astuces !