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

Contenu supprimé Contenu ajouté
Ligne 160 :
La question qui peut maintenant venir à l'esprit est la suivante : Supposons que l'on ait plusieurs façons d'écrire un programme, comment peut-on savoir laquelle de ces façons est la plus rapide ?
 
Pour cela, nous disposons d'une fonction préprogrammée qui se nomme '''os.clock''' et qui est capable de nous donner une approximation du temps d'exécution du programme que l'on est en train d'écrire. Nous allons donc, dans un [[Module:Polynôme]] essayer de comparer les temps d'exécution des trois façons d'écrire le programme de calcul de la fonction '''p.poly''' vue précédemment. En fait, nous allons écrire trois fonctions : '''p.poly1''', '''p.poly2''' et '''p.poly3''' qui, en plus du résultat nous renvoie le temps d'exécution :.
 
<syntaxhighlight lang="lua">
 
local p = {}
 
function p.poly1(frame)
local temps = os.clock()
local reponse = "Le résultat est "
reponse = reponse..7*frame.args[1]^4+5*frame.args[1]^3+3*frame.args[1]^2+frame.args[1]+2
temps = os.clock() - temps
reponse = reponse.." et le temps d'exécution est "..temps
return reponse
end
 
function p.poly2(frame)
local temps = os.clock()
local x = frame.args[1]
local reponse = "Le résultat est "
reponse = reponse..7*x^4+5*x^3+3*x^2+x+2
temps = os.clock() - temps
reponse = reponse.." et le temps d'exécution est "..temps
return reponse
end
 
function p.poly3(frame)
local temps = os.clock()
local x = frame.args[1]
local reponse = "Le résultat est "
reponse = reponse..(((7*x+5)*x+3)*x+1)*x+2
temps = os.clock() - temps
reponse = reponse.." et le temps d'exécution est "..temps
return reponse
end
 
return p
 
</syntaxhighlight>
 
Nous remarquons que, pour chaque fonction, nous prenons le temps en début de fonction et en fin de fonction et nous faisons la différence des deux temps pour avoir une estimation du temps d'exécution de la fonction seule. Si nous ne faisions pas cela, nous aurions, à la fin de la troisième fonction, le temps cumulé des trois fonctions car le compteur temps ne s’arrête pas d'une fonction à l'autre.
 
'''<nowiki>{{#invoke:Polynôme|poly1|7}}</nowiki>''' nous donne : {{#invoke:Polynôme|poly1|7}}
Ligne 170 ⟶ 208 :
 
'''<nowiki>{{#invoke:Polynôme|poly3|7}}</nowiki>''' nous donne : {{#invoke:Polynôme|poly3|7}}
 
 
Nous voyons maintenant clairement que la meilleure des trois fonctions est bien la troisième et la plus mauvaise est bien la première.
 
== Comment utiliser des fonctions écrites dans un autre module ==