| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
| presentation [2026/04/03 12:35] – root | presentation [2026/04/03 14:58] (Version actuelle) – [Exceptions] root |
|---|
| </code> | </code> |
| A l'exécution, le traitement démarre à l'instruction de début du bloc principal, puis exécute toutes les instructions jusqu'à l'instruction //except//. A ce moment là, le traitement passe directement à l'instruction de fin puis il se termine.\\ | A l'exécution, le traitement démarre à l'instruction de début du bloc principal, puis exécute toutes les instructions jusqu'à l'instruction //except//. A ce moment là, le traitement passe directement à l'instruction de fin puis il se termine.\\ |
| La deuxième instruction de début possible est ''background <nom>'' : le traitement fonctionne de manière identique à celui avec ''begin'' à la seule différence que le traitement s'exécute en tâche de fond, et donc qu'il rend la main immédiatement. Dans ce mode, toutes les écritures et lectures depuis la console sont automatiquement inhibées par l'exécuteur.\\ | La deuxième instruction de début possible est ''background <nom>'' : le traitement fonctionne de manière identique à celui avec ''begin'' à la seule différence que le traitement s'exécute en tâche de fond, et donc qu'il rend la main immédiatement. Dans ce mode, toutes les écritures et lectures depuis la console sont automatiquement inhibées par l'exécuteur (''echonl'' ''echo'' ''input'').\\ |
| La troisième et dernière instruction de début possible est ''library <nom>(<parametres>)''. Elle permet au programme d'être appelé depuis n'importe quel autre programme ou library, mais la bibliothèque ne peut pas être le premier programme lancé. Lors de l'appel, le chargement de la bibliothèque se fait à la volée, à l'exécution uniquement.\\ | La troisième et dernière instruction de début possible est ''library <nom>(<parametres>)''. Elle permet au programme d'être appelé depuis n'importe quel autre programme ou library, mais la bibliothèque ne peut pas être le premier programme lancé. Lors de l'appel, le chargement de la bibliothèque se fait à la volée, à l'exécution uniquement.\\ |
| ==== Include et appels externes ==== | ==== Include et appels externes ==== |
| ; | ; |
| </code> | </code> |
| Les appels de bibliothèque et méthode se font avec les instructions //do// //call// //invoke// : | Les appels de bibliothèque et méthode se font avec les instructions ''do'' ''call'' ''invoke'' : |
| * appel de sub/méthode d'objet : ''do <var>(param1, param2, ...)'', écrits en W et déclarés dans le même source que le source courant (fichiers //include// compris). | * appel de sub/méthode d'objet : ''do <var>(param1, param2, ...)'', écrits en W et déclarés dans le même source que le source courant (fichiers //include// compris). |
| * appel de bibliothèque, externe au source en cours : ''call <nom biblio>(param1, param2, ...)'', bibliothèque écrite en W, bloc principal de type //library//, et disponible dans le répertoire [[install|WLIB]] (le compilé). | * appel de bibliothèque, externe au source en cours : ''call <nom biblio>(param1, param2, ...)'', bibliothèque écrite en W, bloc principal de type //library//, et disponible dans le répertoire [[install|WLIB]] (le compilé). |
| Tous les passages de paramètres se font par référence : dans les sous-programmes appelées, les accès aux variables agissent sur la variable origine. | Tous les passages de paramètres se font par référence : dans les sous-programmes appelées, les accès aux variables agissent sur la variable origine. |
| ==== Types de données ==== | ==== Types de données ==== |
| Les variables se déclarent obligatoirement, mais sans type, et à n'importe quel endroit du code. Elle ne deviennent utilisable qu'à partir de leur déclaration, sous peine de déclencher une exception. | Les variables se déclarent obligatoirement, mais sans type, et à n'importe quel endroit du code. Elle ne deviennent utilisable qu'à partir de leur déclaration, sous peine de déclencher une exception. Attention à ne pas mettre une déclaration de variable dans un corps de boucle, car la re déclaration de la même variable génèrera une exception. |
| <code wlang> | <code wlang> |
| ; declaration de 3 variables | ; declaration de 3 variables |
| Les variables appartenant à une hashtable ne sont accessible que via la hashtable, sauf les classes et //sub// accessibles globalement. | Les variables appartenant à une hashtable ne sont accessible que via la hashtable, sauf les classes et //sub// accessibles globalement. |
| === Utilisation === | === Utilisation === |
| Les variables s'affectent avec l'instruction //let//. Il est possible de //dés-affecter// une variable avec l'instruction //delet//. Dans ce cas, le contenu de la variable est supprimé mais elle reste déclarée, sans type (même état qu'après sa déclaration avec ''declare''). L'ajout de variables dans une Hashtable n'a pas besoin de déclaration, mais elles s'affectent et se dés-affectent comme les autres ; cependant l'instruction //delet// d'un membre d'une hashtable supprime la variable de la hastable (contrairement aux autres). La syntaxe à utiliser est ''<varht>.<membre>''. | Les variables s'affectent avec l'instruction ''let''. Il est possible de //dés-affecter// une variable avec l'instruction ''delet''. Dans ce cas, le contenu de la variable est supprimé mais elle reste déclarée, sans type (même état qu'après sa déclaration avec ''declare''). L'ajout de variables dans une Hashtable n'a pas besoin de déclaration, mais elles s'affectent et se dés-affectent comme les autres ; cependant l'instruction ''delete'' d'un membre d'une hashtable supprime la variable de la hastable (contrairement aux autres). La syntaxe à utiliser est ''<varht>.<membre>''. |
| <code wlang> | <code wlang> |
| declare h, n, d | declare h, n, d |
| </code> | </code> |
| ==== Exceptions ==== | ==== Exceptions ==== |
| Chaque programme et sous-programme contient obligatoirement une instruction [[w:instr:except|except]]. Lorsque qu'une exception survient, l'exécuteur saute automatiquement au bloc exception, c'est à dire à la première instruction qui suit la ligne //except//.\\ | Chaque programme et sous-programme contient obligatoirement une instruction [[reference#except|except]]. Lorsque qu'une exception survient, l'exécuteur saute automatiquement au bloc exception, c'est à dire à la première instruction qui suit la ligne ''except''.\\ |
| Dans le bloc de traitement, il est possible de forcer la levée d'une exception avec l'instruction [[w:instr:throw|throw]].\\ | Dans le bloc de traitement, il est possible de forcer la levée d'une exception avec l'instruction [[reference#throw|throw]].\\ |
| Dans le bloc exception, par défaut si rien n'est codé, l'exception se propage au programme appelant, et remonte ainsi jusqu'au programme principal. Dans ce cas, l'exception remonte un code exit au shell correspondant au code exception (en gérant le code retour sur 8 bits).\\ | Dans le bloc exception, par défaut si rien n'est codé, l'exception se propage au programme appelant, et remonte ainsi jusqu'au programme principal. Dans ce cas, l'exception remonte un code exit au shell correspondant au code exception (en gérant le code retour sur 8 bits).\\ |
| Toujours dans le bloc exception, il est possible d'annuler l'exception en cours par l'instruction [[w:instr:catch|catch]] : le programme sort immédiatement du bloc sans exception. Il est également possible de lever une autre exception avec l'instruction //throw// : le programme sort aussi immédiatement du bloc, avec le code exception indiqué dans //throw//.\\ | Toujours dans le bloc exception, il est possible d'annuler l'exception en cours par l'instruction [[reference#catch|catch]] : le programme sort immédiatement du bloc sans exception. Il est également possible de lever une autre exception avec l'instruction ''throw'' : le programme sort aussi immédiatement du bloc, avec le code exception indiqué dans ''throw''.\\ |
| Enfin, la variable système [[w:instr:varsys|@except]] contient l'exception en cours et [[w:instr:varsys|@exceptline]] donne le numéro de ligne du source qui a provoqué l'exception.\\ | Enfin, la variable système [[reference#varsys|@except]] contient l'exception en cours et [[reference#varsys|@exceptline]] donne le numéro de ligne du source qui a provoqué l'exception.\\ |
| A tout moment, l'instruction [[w:instr:return|return]] permet de sortir du bloc en cours, soit le bloc de traitement soit le bloc exception, sans changer les conditions de sortie (exception). Lorsque le bloc courant est le bloc principal, //return// provoque la fin du programme et le retour à l'appelant (le shell, etc.) avec comme retour le code exception courant (sur 8 bits), 0 si pas d'exception.\\ | A tout moment, l'instruction [[reference#return|return]] permet de sortir du bloc en cours, soit le bloc de traitement soit le bloc exception, sans changer les conditions de sortie (exception). Lorsque le bloc courant est le bloc principal, ''return'' provoque la fin du programme et le retour à l'appelant (le shell, etc.) avec comme retour le code exception courant (sur 8 bits), 0 si pas d'exception.\\ |
| Exemple | Exemple |
| <code wlang> | <code wlang> |