jjacques68 Posté(e) le 25 avril 2020 Signaler Posté(e) le 25 avril 2020 (modifié) normal, ta fonction retourne 2 valeurs. avec la méthode actuelle du print ne permet d'afficher que la première. essaye : -- On appelle la fonction Calcul en lui passant 2 paramètres local retour1, retour2 = Calcul(param1, param2) print(retour1, retour2) Modifié le 25 avril 2020 par jjacques68
971jmd Posté(e) le 25 avril 2020 Auteur Signaler Posté(e) le 25 avril 2020 (modifié) j'ia trouver -- la fonction Calcul reçoit 2 arguments (x et y) function Calcul(x, y) local r1 = x * y local r2 = x + y return r1, r2 end -- Affectation multiple local param1, param2 = 100, 100 local multi, add = 0, 0 multi, add = Calcul(param1, param2) print("Le total de R1 est = "..multi.." et R2" ..add) Modifié le 25 avril 2020 par 971jmd 1
mprinfo Posté(e) le 25 avril 2020 Signaler Posté(e) le 25 avril 2020 tu n'a pas besoin du "local" devant la fonction.Personnelle j'utilise toujours local pour limiter la propagation de celle-ci Si j'ai besoin d'une variable permanente la je n utilise pas local Donc dans une fonction on utilise e générale des variables qui ne servent plus ensuite d'où l'utilité du local et on retourne le résultat avec return Envoyé de mon BLA-L29 en utilisant Tapatalk 1
971jmd Posté(e) le 25 avril 2020 Auteur Signaler Posté(e) le 25 avril 2020 ok Tu veux dire que sans le local le R1 et R2 reste propre à la fonction calcul r1 = x * y r2 = x + y
jjacques68 Posté(e) le 25 avril 2020 Signaler Posté(e) le 25 avril 2020 il faut les " local" pour R1 et R2, c'est plus propre. du coup elles ne peuvent être utilisées que dans la fonction. Elles ont une portée locales à la fonction. Tu ne peux pas les utiliser en dehors de la fonction. il n'y a pas d'intérêt (dans ce cas) à chercher à les utiliser en-dehors de la fonction. Vu que tu fais un "return" de ces variables locales. en effet si tu ne voulais pas utiliser "return", il faudrait alors déclaré les variables R1 et R2 en dehors de la fonction, pour qu'elle devienne globales (à la scène), et donc utilisable partout alors un print(R1,R2) fonctionnerait. Mais c'est pas propre... ça à aucun intérêt, et la fonction non plus du coup...
971jmd Posté(e) le 25 avril 2020 Auteur Signaler Posté(e) le 25 avril 2020 (modifié) Très bien je vais étudier tout ça je sature un grand merci plein de soleil de la Guadeloupe Modifié le 25 avril 2020 par 971jmd
jjacques68 Posté(e) le 25 avril 2020 Signaler Posté(e) le 25 avril 2020 merci ! on se plein pas de ce côté là en Alsace actuellement...
971jmd Posté(e) le 25 avril 2020 Auteur Signaler Posté(e) le 25 avril 2020 Temp mieux pour le soleil, sauf pour la température 1
Krikroff Posté(e) le 25 avril 2020 Signaler Posté(e) le 25 avril 2020 Il y a 2 heures, jjacques68 a dit : Mais c'est pas propre... ça à aucun intérêt, et la fonction non plus du coup... Je dirais que c'est plus sage c'est de faire comme cela pour ne pas perdre la tête c'est donc un conseil judicieux de @jjacques68 Mais nous pourrions en débattre 2 bonnes heures de ces trois affirmations Pas propre: c'est très relatif Aucun intérêt: partage des variables privées entre fonctions, limitation du passage d'arguments, optimisation du code, etc. le revers est que cela impact souvent la lisibilité du code. La fonction non plus: C'est au cas par cas, mais une fonction ne doit pas obligatoirement retourner une valeur En complément, il existe également le bloque do end, ce dernier permet de définir soit même la portée de portion de son code, très utilise dans beaucoup de cas. (https://www.lua.org/pil/4.2.html) Bon codage 1
971jmd Posté(e) le 26 avril 2020 Auteur Signaler Posté(e) le 26 avril 2020 (modifié) salut @Krikroff oui effectivement c'est vrai casse-tête pour un débutant. Sans oublier les enfants dans la maison Mais grâce à vous et ma persévérance j'avance.. j'ai crée un petit code quipermet de calculer une surface function Calcul(x, y) print("----------CALCUL SURFACE------------") io.write("Longeur N°1 >> ") x = io.read() io.write("Largeur N°2 >> ") y = io.read() local r1 = x * y return r1 end multi = Calcul() print("Le total de la surface est: "..multi.." M2") bon J'ai voulu sophistiquée le résultat final du style en affichant la Long et la Larg dans le printe Le total de 10 m par 10 m est de ..... Mais je n'y suis pas arrivée. Modifié le 26 avril 2020 par 971jmd
971jmd Posté(e) le 26 avril 2020 Auteur Signaler Posté(e) le 26 avril 2020 Et ça aussi, bon peut être pas très propre mai c'est un début --[[ %% properties 33 value 24 value %% events %% globals --]] function Calcul(x, y) local r1 = x + y return r1 end local param1 = tonumber(fibaro:getValue(33, "value")) local param2 = tonumber(fibaro:getValue(24, "value")) total_V1 = Calcul(param1, param2) print("Le total des lampes = "..total_V1) ----------- if (param1 > param2) then fibaro:call(244, "turnOff") else fibaro:call(244, "turnOn") print(variableA) end return variableA
jjacques68 Posté(e) le 26 avril 2020 Signaler Posté(e) le 26 avril 2020 les fonctions "io.xxxxx" ne fonctionnent pas sur la HC2 il me semble !! attention, tout ce que tu fais sur ton logiciel, ne peut pas être reproduit dans la HC2 !! dans ton 2ème exemple, c'est "variableA" ? elle apparaît d'un coup ! Puis il y a un return de cette variable, mais le mot return est réservé pour les fonctions, là on est plus dans la fonction !
971jmd Posté(e) le 26 avril 2020 Auteur Signaler Posté(e) le 26 avril 2020 salut Oui j'ai fait le ménage function Calcul(x, y) local r1 = x + y return r1 end local param1 = tonumber(fibaro:getValue(33, "value")) local param2 = tonumber(fibaro:getValue(24, "value")) total_V1 = Calcul(param1, param2) print("Le total des lampes = "..total_V1.. " %") ----si lalampe du salon est > que la cuisine if (param1 > param2) then fibaro:call(244, "turnOn") else fibaro:call(244, "turnOff") end
971jmd Posté(e) le 26 avril 2020 Auteur Signaler Posté(e) le 26 avril 2020 et je confirme que la fonctions "io.xxxxx" ne fonctionnent pas sur la HC2 1
971jmd Posté(e) le 26 avril 2020 Auteur Signaler Posté(e) le 26 avril 2020 (modifié) Bon j'ai toujours du mal avec les fonctions Pour la reglen°1 ça peut aller mais je ne comprends pas trop la règle N°2 Source : http://wxlua.free.fr/Tutoriel_Lua/Tuto/Fonctions/resultats.php Modifié le 26 avril 2020 par 971jmd
jjacques68 Posté(e) le 26 avril 2020 Signaler Posté(e) le 26 avril 2020 (modifié) ben la règle 2 utilise les fonctions de la règle 1. la fonction3 renvoie 2 résultats : R1 et R2. dans le premier cas, on récupère les 2 retour de la fonction3, respectivement dans x et y. dans le 2ème cas, on ne récupère que la première valeur, il n'y a que x qui récupère R1 (pas de y, donc pas de R2) dans le 3ème cas, c'est tordu : on a d'un côté : x,y,z aux qu'elles ont affecte respectivement : 10, et les retours de la fonction3. donc x = 10 et y=R1 et z = R2, comme c'est dit dans les commentaires... Modifié le 26 avril 2020 par jjacques68
971jmd Posté(e) le 27 avril 2020 Auteur Signaler Posté(e) le 27 avril 2020 (modifié) oui j'ai bossé sur lua tout l'après-midi et je commence à comprendre beaucoup de chose Mais les fonctions ce n'est pas encor ça La fonction que je ne comprends pas est : function AfficheArguments(...) Une fonction avec comme argument 3 point Modifié le 27 avril 2020 par 971jmd
971jmd Posté(e) le 27 avril 2020 Auteur Signaler Posté(e) le 27 avril 2020 (modifié) salut poiuuuuuu je bloque sur le principe des fonctions. Pour comprendre je n'arrive pas à mettre l'exemple suivant en pratique local x, y, z = 0, 0, 0 x, y = Fonction1() --> x = nil, y = nil (la fonction n'a pas de return) x, y = Fonction2() --> x = R1, y = nil (la fonction a 1 seul return) x, y, z = Fonction3() --> x = R1, y = R2, z = nil (il n'y a pas de 3e return) print(Fonction1()) --> print(Fonction2()) --> R1 print(Fonction3()) --> R1 R2 print(Fonction3(), 1) --> R1 1 print(Fonction3(),.. "x") --> R1x (c'est la concaténation de Fonction3 et de "x") Modifié le 27 avril 2020 par 971jmd
mprinfo Posté(e) le 27 avril 2020 Signaler Posté(e) le 27 avril 2020 Pour comprendre tu fais 3 colonnes Et tu les rempli avec les variables puis avec les résultats ça te parlera peut-être mieuxEXEMPLE x, y, z = 10, R1, R2 X. Y. Z10 R1 R2 Envoyé de mon BLA-L29 en utilisant Tapatalk
971jmd Posté(e) le 27 avril 2020 Auteur Signaler Posté(e) le 27 avril 2020 salut @mprinfo Oui ça j'ai compris, mais pour comprendre leurs règles, je souhaiterais les faire fonctionnée pour mieux comprendre
971jmd Posté(e) le 27 avril 2020 Auteur Signaler Posté(e) le 27 avril 2020 j'ai trouver ça mai je n'arrives pas à le fair fonctionnée function f (op, a, b) if op == 'add' then return a + b elseif op == 'sub' then return a - b end error("invalid operation") end function g (value) print(value) end -----------RESULT----------------- > = f('add', 1, 2) -- args are given inside (), separated by commas. 3 > = f('add', 1, 2, 123) -- extra args are ignored 3 > = f('add', 1) -- missing args aren't an error, instead they will be filled with nil, which might cause an error in the function's code stdin:1: attempt to perform arithmetic on local 'b' (a nil value) > = g() -- to call a function with no args, use () nil > = g "example" -- the () can be omitted if you have one quoted string arg example > = g {} -- same with one table constructor table: 0x820ee0
jjacques68 Posté(e) le 28 avril 2020 Signaler Posté(e) le 28 avril 2020 il faut tester la présence de tes arguments : si y en manque un, on retourne une erreur. function f (op, a, b) if op and a and b then --si tous les arguments sont là if op == 'add' then --add return a + b elseif op == 'sub' then --sub return a - b else print("ERROR : unknown first argument") --opération inconnue return false end else print("ERROR : argument missing) --arguments manquant return false end end attention, je sui spas sûr que la fonction error() existe sur la HC2, je sais plus, je n'en ai plus. elle existe sur la HC3 (fibaro.error()).
971jmd Posté(e) le 28 avril 2020 Auteur Signaler Posté(e) le 28 avril 2020 (modifié) Salut, j'ai oublié de te dire que mon apprentissage LUA est principalement sur Zerobrane studio https://studio.zerobrane.com/ et le prolemme que je rencontre avec les site les sites francophones le LUA ne sont pas très bien converti. J'ai testé le code et il ne s'emble pas avoir d'erreur mai j'ai aucun résultat rien Program completed in 0.10 seconds (pid: 18744). Modifié le 28 avril 2020 par 971jmd
jjacques68 Posté(e) le 28 avril 2020 Signaler Posté(e) le 28 avril 2020 mais il faut faire un print() de la fonction : print(f("add", 1, 2))
Messages recommandés