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

Contenu supprimé Contenu ajouté
m Robot : Remplacement de texte automatisé (- l'utilisation + l’utilisation , - d'asile + d’asile , - s'inspirer + s’inspirer , - l'expression + l’expression , - d'usage + d’usage , - d'autre + d’autre , - d'important + d’important )
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 )
Ligne 16 :
 
==== 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'estn’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.
 
Prenons un exemple :
Ligne 163 :
</syntaxhighlight>
 
Cette façon d'écrire le programme, bien que fonctionnant parfaitement, n'estn’est pas correcte. Pourquoi ?
 
En fait, lorsqu'on écrit '''frame.args[1]''', on fait appel à la valeur de x que nous a fourni l'utilisateur dans la commande #invoke et qui est donc quelque chose d'extérieur au programme. Allez chercher cette valeur met en œuvre des routines qui sont, à elles seules, des programmes qu’il faut appeler et exécuter. tout cela demande du temps. On comprend donc aisément qu'écrire quatre fois '''frame.args[1]''' va demander un temps d'exécution plus long que si l’on ne l'écrivait qu'une seule fois. Il est donc bien préférable d'écrire la fonction en s'arrangeant pour n'avoir qu'une seule exécution de '''frame.args[1]'''. À la première façon d'écrire le programme, nous préférerons donc la deuxième façon suivante :
Ligne 180 :
</syntaxhighlight>
 
On pourrait, à ce niveau, être satisfait, de notre programme et penser que l’on a la meilleure façon possible de l'écrire. En fait, il n'en est rien ! Il est encore possible d'améliorer le temps d'exécution de la fonction '''p.poly'''. Cette façon d'écrire un polynôme, en informatique, n'estn’est pas correcte. Si nous comptons les multiplications et les additions, nous voyons qu’il y a 9 multiplications et 4 additions. Peut-on imaginer une façon d'écrire un polynôme de façon à réduire le nombre d'opérations. Cela est possible en remarquant, tout simplement, que :
 
<math>7x^4+5x^3+3x^2+x+2 = x(7x^3+5x^2+3x+1)+2 = x(x(7x^2+5x+3)+1)+2 = x(x(x(7x+5)+3)+1)+2</math>
Ligne 376 :
Et là, avec un grand désarroi, nous constatons que cela ne marche pas. Que s'est-il passé ? En fait, l'interpréteur de mediawiki évalue les modèles avant d’avoir les retours des modules. Et, par conséquent, quand le module Cadre nous ramène <nowiki>{{Encadre|contenu=Coucou, je suis dans un cadre!}}</nowiki>, il est déjà trop tard !
 
Heureusement, la situation n'estn’est pas désespérée car nous disposons, dans notre lua avec scribunto, d'une fonction préprogrammée '''frame:preprocess''' qui va évaluer les modèles avant que ceux-ci ne soient retournés. Pour expérimenter cela, nous allons donc écrire, dans le [[Module:Cadre]], une nouvelle fonction '''p.cadre2''', ainsi :
 
<syntaxhighlight lang="lua">