« Initiation au Lua avec Scribunto/Gestion de l'environnement » : différence entre les versions

Contenu supprimé Contenu ajouté
m Robot : Remplacement de texte automatisé (- n'est pas + n’est pas , - Aujourd'hui + Aujourd’hui , - d'euros + d’euros , - d'agir + d’agir , - l'apparence + l’apparence )
m Robot : Remplacement de texte automatisé (-\n(==={0,3})(?: *)([^\n=]+)(?: *)\1(?: *)\n +\n\1 \2 \1\n)
Ligne 11 :
__TOC__
{{Clr}}
== Gestion des erreurs ==
 
Dans ce paragraphe, nous allons dire quelques mots sur la gestion des erreurs.
 
==== Exposé du problème ====
Lorsqu'on fait un programme pour notre usage personnel, on sait généralement ce qu’il contient et on peut alors l’utiliser correctement. Si ce programme est destiné à être utilisé par quelqu’un d'autre, alors on n’est pas sûr que l'autre utilisateur aura bien compris comment marche le programme. L'utilisateur va, peut-être, faire des erreurs en l'utilisant. Le bon programmeur doit être capable d'anticiper toutes les erreurs qu'un utilisateur peut faire et doit prévoir, dans son programme, des instructions pour permettre au programme de réagir correctement en cas d'erreur d'utilisation.
 
Ligne 59 :
Que c'est-il passé. En fait, rien de bien compliqué, nous avons vu, dans le chapitre exposant les fonctions préprogrammées de base, que la fonction '''tonumber''' ne comprenait pas le français et était incapable de convertir la chaîne de caractère "cinquante-six" en nombre 56. Et dans ce cas là, elle nous retourne '''nil'''. par conséquent la variable poids contenait '''nil''' au moment où elle a été comparée au nombre 55, ce qui a provoqué l'erreur de script.
 
==== Gestion programmée de l'erreur ====
 
Comment remédier à ce problème ? Il nous suffit simplement d’éviter que la variable poids soit comparée à un nombre lorsqu'elle contient '''nil''' et que dans ce cas la fonction nous retourne un message d'erreur informant l'utilisatrice de l'erreur qu'elle a commise. Nous devons donc encore perfectionner notre programme en écrivant une nouvelle fonction '''p.alerte5''' qui met en œuvre ce que l’on vient de dire :
Ligne 104 :
 
 
==== Gestion à l'aide de pcall ====
 
Une autre façon de gérer les erreurs pouvant se produire à l'appel d'une fonction est d’utiliser la fonction '''pcall''' dont le rôle est justement de gérer les erreurs à l'appel d'une fonction. Il suffit d'invoquer la fonction en lui donnant comme paramètres : le nom de la fonction, ses paramètres et le message d'erreur s'il y a problème.
Ligne 145 :
<br />
 
== Rapidité d'exécution d'un programme ==
 
En informatique, un programme, bien qu’il s'exécute correctement, peut ne pas donner entièrement satisfaction si son exécution ne se fait pas assez rapidement. Nous n'avons pas évoqué le problème jusqu'à maintenant, mais le programmeur doit garder présent à l'esprit que son programme doit s'exécuter le plus rapidement possible pour éviter de trop monopoliser la machine qui exécute son programme. Bien souvent, pour exécuter une tache particulière, plusieurs solutions s'offrent à nous. Nous devons alors choisir, parmi toute les solutions possibles, celle dont le temps d’exécution sera le plus bref possible. Prenons un exemple :
Ligne 261 :
<br />
 
== Comment utiliser des fonctions écrites dans un autre module ==
 
Dans les chapitres précédents, nous avons dit qu'une variable ou une fonction déclarée avec le mot-clé '''local''' n'est utilisable qu’à l'intérieur du module où elles sont déclarées. Cette affirmation sous-entend que si l’on n'emploie pas le mot-clé '''local''', alors la variable ou la fonction déclarées devrait pouvoir être utilisée dans un autre module. Dans ce paragraphe, nous allons donc étudier comment utiliser les variables et les fonctions créées dans un autre module sans le mot-clé '''local'''.
Ligne 270 :
 
 
==== Première façon : On souhaite récupérer des objets indépendants de la table p ====
 
Il est, bien sût, indispensable que les objets que l’on souhaite récupérer ne soient pas déclarés en local.
Ligne 299 :
 
 
==== Deuxième façon : L'objet que l’on souhaite récupérer est dans une table p ====
 
C'est un peu comme si l’on souhaitait utiliser la commande '''#invoke''' à partir d'un autre module. Mais cette commande ne marche pas si elle est utilisée dans un module. Nous allons donc transférer le contenu de la table '''p''' dans une table locale au module appelant.
Ligne 354 :
<br />
 
== Priorité de l'interpréteur ==
 
En général, l'endroit le plus adéquat pour appeler un module est de le faire à partie d'un modèle. Ceci est fortement conseillé pour éviter de surcharger l'espace principal avec la commande '''#invoke'''. Par conséquent, le plus souvent, les modèles appelleront les modules. Quelquefois, on risque de devoir faire le contraire. C'est-à-dire d'appeler un modèle dans un module. Que se passe-t-il alors ? Nous allons tester cette opération en prenant un exemple. Essayons d'écrire un module qui aurait pour fonction d'encadrer un texte en faisant appel au [[Modèle:Encadre]]. Dans un [[Module:Cadre]], nous serions tenté d'écrire une fonction '''p.cadre1''' ainsi :