daivy9kens Posté(e) le 26 avril 2017 Signaler Posté(e) le 26 avril 2017 Bonjour, Quelqu'un pourrait-il me dire pourquoi le debug me dit : "[DEBUG] 16:04:40: line 21: 'end' expected (to close 'if' at line 9) near" dans le code suivant : 1 --[[ 2 %% properties 3 27 sceneActivation -- L'envoi d'une scène par le module avec ID 84 (notre micro-module) déclenche l'exécution du script 4 %% globals 5 --]] 6 7 local NumScene = tonumber(fibaro:getValue(27, "sceneActivation")) -- On récupère la scène activée, on convertit le texte en nombre (via la commande tonumber) et on la stocke dans la variable "NumScene" pour l'utiliser dans la suite du script 8 9 if (NumScene == 26) -- Si la touche appuyée génère le numéro de scène 26 (appui court sur S2) 10 then 11 fibaro:debug("Bouton 1 appuyé (court):") 12 13 -- Nous allons inverser l'état d'un variateur de lumière dont l'ID est 27 14 if ((tonumber(fibaro:getValue(27, 'value'))) == 0) -- On récupère l'état du variateur 27 et s'il est éteint ... 15 then -- alors 16 fibaro:call(27,'turnOn') -- on allume 17 fibaro:debug("Allumage de la lampe") 18 else -- sinon 19 fibaro:call(27,'turnOff') -- on éteint 20 fibaro:debug("Extinction de la lampe") 21 end Soit je ne sais plus faire de copier coller soit quelque chose m'échappe ?
Lazer Posté(e) le 26 avril 2017 Signaler Posté(e) le 26 avril 2017 Tu as ouvert 2 if (lignes 9 et 14) donc il te faut 2 end pour les fermer. Il faut donc ajouter un end en ligne 22. Il dit bien : " 'end' expected (to close 'if' at line 9) "
daivy9kens Posté(e) le 26 avril 2017 Auteur Signaler Posté(e) le 26 avril 2017 Merci. Je ne comprends pas encore très bien tous ces "end" à placer. Car pour moi quand c'est end on ne va pas plus loin mais visiblement malgré tout si l'on mets des choses en dessous il continue à les lire. Bref, vous avez compris que je débutais et que mon esprit doit s'adapter à tout cela
jojo Posté(e) le 26 avril 2017 Signaler Posté(e) le 26 avril 2017 à chaque IF doit correspondre 1 END donc IF ... THEN ... ELSE ... (otionel) END ou IF ... THEN IF ... THEN ... ELSE .... END ELSE ... END d'où l'importance des alignements pour une meilleure lisibilité du code et un debugage plus facile.
Lazer Posté(e) le 26 avril 2017 Signaler Posté(e) le 26 avril 2017 OUi il faut bien indenter ton code pour une meilleur lisibilité. Le IF démarre une condition, qui si elle est vérifiée, verra tout son code situé dans le bloc (entre le then et le end) exécuté. Ensuite, le déroulement normal du programme reprend après le end, sauf si tu as intercalé un "else" entre les 2. Enfin, ce sont des principes généraux de programmation qui sont valable pour tous les langages, seule la syntaxe change (la majorité des langages sont dérivés du Langage C, qui utilise des accolades à la place des mots clés "then" et "end"). Si tu débutes en programmation, tu trouveras plein de tutos d'algorithmique sur Internet. Une fois que tu as compris cela, le LUA est finalement un langage plus simple que les autres.
Messages recommandés