Aller au contenu
daivy9kens

end expected

Recommended Posts

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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) "

Partager ce message


Lien à poster
Partager sur d’autres sites

Pris de court par la légende 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

à 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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

×