WLangage

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
WLangage
Apparu en 1992 (dernière révision en 2013)
Auteur PC SOFT
Paradigme procédural, structuré, orienté objet
Typage statique, dynamique, faible
Influencé par BASIC, Pascal, C++
Implémentations WinDev, WebDev, WinDev Mobile, Wdscript
Système d'exploitation Multiplate-forme (Windows, Windows CE, Windows Phone, Windows Mobile, iOS, Linux, Android)

Le WLangage[1] est un langage de programmation de 4e génération[2],[3]. inclus dans les outils de développement WinDev, WebDev et WinDev Mobile. Il est propriétaire et ne peut être manipulé qu'avec les outils PC SOFT. Le WLangage est né en 1992 avec la première version de WinDev.

Même s'il y a explicitement une première phase précoce de compilation, le bytecode WLangage est exécuté par une machine virtuelle ou converti en code natif lors de l'exécution par un compilateur à la volée (just in time, JIT). Le framework est disponible sous Windows (32 bits, 64 bits, Phone, Mobile et CE), sous iOS (iPhone et iPad), sous Android et sous Linux.

Le WLangage peut également s'appuyer sur le framework Java pour une partie de ses fonctionnalités, ce qui permet une indépendance relative et limitée du fichier exécutable par rapport au système d'exploitation cible. Il en va de même dans WebDev, où le WLangage peut s'appuyer sur le framework PHP, sans toutefois permettre d'utiliser toutes les possibilités de ce dernier[4].

Initialement prévu pour Windows, une partie des fonctions du WLangage est basée sur l'API Microsoft Windows.

Programmation[modifier | modifier le code]

Le WLangage est un langage de programmation procédurale qui permet la programmation impérative et la programmation orientée objet. C'est en fait un langage de programmation multi-paradigme.

Le WLangage contient des fonctions de haut niveau, telle que la fonction EcranVersFichier, qui effectue les affectations du contenu des champs d'une fenêtre vers des tables stockées dans un fichier ou des variables, auxquelles les champs ont été préalablement reliés (databinding).

Typage[modifier | modifier le code]

Le WLangage autorise une utilisation souple du typage. Les variables doivent être typées mais les paramètres formels des procédures ou les itérateurs de boucles peuvent ne pas l'être. Il est ainsi possible dans un même projet de combiner des procédures avec typage strict pour profiter de la rigueur du typage statique et des procédures sans typage pour profiter de la souplesse du typage dynamique et du duck typing.

Orientation objet[modifier | modifier le code]

Le WLangage permet l'utilisation de classes et inclut entre autres :

Limitation importante : il est impossible de créer des classes qui hériteraient des éléments graphiques de base (appelés champs dans la terminologie WinDev). En fait, ces champs ne peuvent pas être instanciés ni manipulés comme des objets: il n'y a pas la possibilité d'ajouter par programmation un champ à un écran vierge autrement que par copie d'un champ déjà existant (clonage) ou via des API[réf. nécessaire].

Gestion des instances[modifier | modifier le code]

L'allocation des instances est toujours dynamique, que la variable objet soit une variable locale, une variable globale, un membre de classe ou que l'instance soit créée par l'ordre allouer (new si on code en anglais). Une variable ou un membre objet manipule en fait une référence sur l'instance. Lorsqu'une instance est créée, son constructeur est exécuté.

La gestion des instances se fait par comptage de références, c'est-à-dire que chaque instance possède un compteur du nombre de variables ou de membres qui la manipulent. Lorsque plus aucune variable ou membre ne manipule une instance, son compteur de références arrive à 0, son destructeur est exécuté et l'instance est libérée. Dans la grande majorité des cas, il n'est donc pas nécessaire de se préoccuper de la libération des instances allouées, quelle que soit la méthode d'allocation. Cette technique permet l'exécution du destructeur lorsqu'une instance n'est plus utilisée, ce qui permet de libérer rapidement les ressources utilisées par l'instance (socket, fichier…). Dans le cas de références circulaires entre instances, il est nécessaire de forcer la libération d'une instance du cycle par l'ordre libérer (delete si on code en anglais) pour libérer les autres instances du cycle.

Gestion des erreurs et des exceptions[modifier | modifier le code]

Le WLangage se différencie d'autres langages en distinguant deux catégories d'erreurs qui peuvent survenir lors de l'exécution et en proposant des mécanismes automatiques de traitement des erreurs.

Une erreur, ou erreur non fatale, est une erreur qui se produit en conditions normales lors de l'exécution. Par exemple l'échec de l'ouverture d'un fichier est une erreur non fatale, l'exécution continue pour permettre le traitement de l'erreur. L'erreur peut être traitée par programmation, comme dans la majorité des autres langages, en testant la valeur de retour de la fonction appelée ou en vérifiant une variable d'état (nommée ErreurDétectée). Cependant l'intérêt du WLangage repose sur toute une panoplie de traitements automatiques sans programmation qui permettent de gérer les erreurs qui se produisent dans une procédure :

  • poursuite de l'exécution de la procédure au label spécifique CAS ERREUR
  • sortie de la procédure en renvoyant une valeur d'échec prédéfinie et/ou en relayant l'erreur à l'appelant
  • affichage du message d'erreur avec différentes propositions pour l'utilisateur : réessai de l'opération (utile pour les erreurs de fichiers par exemple), fin de l'application…
  • exécution d'une procédure

Une exception, ou erreur fatale, est une erreur qui se produit en conditions anormales lors de l'exécution. Par exemple l'accès au troisième élément d'un tableau n'en contenant que deux génère une exception, l'exécution en cours s'interrompt de la même manière qu'en C++ ou C#. L'exception peut être traitée par programmation grâce aux instructions QUAND EXCEPTION et QUAND EXCEPTION DANS. Dans ce cas également, WinDev propose des traitements automatiques sans programmation :

  • poursuite de l'exécution de la procédure au label spécifique CAS EXCEPTION
  • exécution d'une procédure

Trilingue[modifier | modifier le code]

Le WLangage permet de programmer en français, en anglais et en chinois, exemples :

- en français :

sChaine est une chaîne
sChaine = DateVersChaine(DateDuJour())

Info("Nous sommes le " + sChaine)

- ou en anglais :

sChaine is string
sChaine = DateToString(Today())

Info("Nous sommes le " + sChaine)

- ou en chinois (dans la version chinoise de WinDev uniquement[5]) :

定义sChaine为字符串型变量
sChaine=日期转换为字符串(今天())
信息("今天是 :"+sChaine)

- voire en mélangeant les langues :

sChaine is string
sChaine = DateVersChaine(DateDuJour())
Info("Nous sommes le " + sChaine)

Il est possible de traduire automatiquement le code d'une langue à l'autre mais cela est plus dû à l'éditeur de code de WinDev, WebDev et WinDev Mobile qu'au WLangage lui-même.

Hello world[modifier | modifier le code]

 Info("Hello world!")

Notes et références[modifier | modifier le code]

  1. W-Langage est l'ancienne orthographe de WLangage.
  2. Selon son éditeur, WLangage est un langage de cinquième génération. La définition académique d'un langage de cinquième génération est un langage basé sur la formulation et la résolution de contraintes, ou bien un langage utilisant la programmation logique. Or, WLangage est un langage de programmation impérative, ce n'est donc pas un langage de 5e génération.
    What makes a 5GL?
  3. Selon un sondage réalisé à Hong-Kong en 1994, les caractéristiques essentielles d'un langage de quatrième génération sont un langage facile à apprendre, qui accélère le travail de programmation, dans lequel il y a un ensemble d'outils permettant de construire rapidement des menus ainsi que des formulaires électroniques et des rapports. Cette définition s'applique parfaitement à Windev et au WLangage
    (en) Mehdi Khosrowpour, Managing Social and Economic Change With Information Technology, Idea Group Inc (IGI) - 1994, (ISBN 9781878289261)
  4. Par exemple, les fonctions LDAP ou encore la prise en charge d'autres SGBD que HyperFileSQL et MySQL (ce qui explique pourquoi l'accès natif à MySQL est gratuit).
  5. Page 21 de la brochure des nouveautés de la version 18

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]