====== Les conditionnelles dans Actiona ======
===== Objectifs du tutoriel =====
Ce tutoriel a pour but de vous apprendre à utiliser les **mécanismes de décisions** d'Actiona. Les points étudiés sont :
* Les différents types de conditionnelles
* Leur utilisation
* Les bonnes pratiques à avoir pour une utilisation efficace
Ce tutoriel, part du principe que vous ne connaissez aucun langage de programmation, et c'est pourquoi certaines bases seront ici expliquées. Si vous possédez déjà des bases de programmation, vous pouvez directement vous rendre à la [[actionaz_conditionals#L'action Condition de variable|seconde partie du tutoriel]].
===== Qu'est-ce qu'une conditionnelle ? =====
On appelle "**système conditionnel**" un système capable de prendre des décisions. De nombreuses fois, il est nécessaire au cours d'un programme de choisir entre plusieurs solutions : par exemple, on veut récupérer, entre deux valeurs //a// et //b//, la valeur la plus haute. La condition serait "Si //a// > //b//, alors a sinon b". Basiquement, on peut énoncer une conditionnelle à partir du moment où on peut dire "Si". Le résultat d'une conditionnelle sera toujours "//si oui//" ou "//si non//". On dit qu'une conditionnelle **renvoie une valeur booléenne** : soit vrai, soit faux.
Dans les langages de programmation cette notion est fondamentale et essentiellement liée aux variables. Il n'est d'aucun intérêt de tester une condition telle que "Si 4 = 4", vu que l'on sait déjà que le résultat sera "vrai". Par contre, si l'on teste un variable "number" avec la même conditionnelle "Si number = 4", alors l'outil devient intéressant car on ne sait pas à l'avance quel sera la valeur de "number".
On peut imbriquer les conditions : "Si number > 0 ET Si number < 10 alors..." nous permet de déterminer si "number" est entre 1 et 9. On peut mettre dans une conditionnelle toute instruction renvoyant un booléen, et combiner les résultats de façon à obtenir l'effet souhaité. On appelle cela [[http://fr.wikipedia.org/wiki/Alg%C3%A8bre_de_Boole_(logique)|Algèbre de Boole]].
===== L'action Condition de variable =====
==== Vérifier un nom simple ====
Dans Actiona, la majorité des conditionnelles est traitée grâce à l'action Condition de variable. Cette action est simple : elle compare deux variable et, en fonction du résultat, vous dirige vers une ligne ou une autre, l'exécution d'un code ou le lancement d'une procédure.
Pour mettre en pratique cette action, commençons par créer un nouveau script. Dans ce script, nous allons chercher à faire un petit questionnaire qui cherchera à vérifier si le nom entré correspond à celui d'"Actionaz" (ancien nom du logiciel).
Pour faire notre script nous allons donc recourir à 4 actions :
* Une action **Entrée de texte**, dans laquelle nous allons poser la question.
* Une action **Boite de dialogue** qui s'affiche si la réponse correspond.
* Une action **Boite de dialogue** qui s'affiche si la réponse ne correspond pas.
* Une action **Condition de variable** qui va déterminer si la réponse est bonne ou pas.
Nous allons paramétrer nos actions de la manière suivante :
=== L'action Entrée de texte ===
{{ :fr:tuto3_bdd_entree.jpg?direct& |}}
Nous posons la question "Quel est le nom de l'application ?" puis nous récupérons la réponse dans la variable "nomLogiciel"
=== La Boite de dialogue "VRAI" ===
{{ :fr:tuto3_bdd_vrai.jpg?direct& |}}
Cette boite de dialogue doit s'afficher si la réponse contenue dans "nomLogiciel" est "Actionaz".
=== La Boite de dialogue "FAUX" ===
{{ :fr:tuto3_bdd_faux.jpg?direct& |}}
Cette boite de dialogue doit s'afficher si la réponse contenue dans "nomLogiciel" n'est pas "Actionaz".
=== La Condition de variable ===
{{ :fr:tuto3_conditionvar.jpg?direct& |}}
L'action Condition de variable étant inédite jusqu'à maintenant, nous allons en décrire les paramètres :
* **Variable** : la variable à tester (inutile de mettre le symbole '$' devant puisque l'on sait qu'il s'agira d'une variable).
* **Comparaison** : l'outil de comparaison utilisé. Ici, ce sera l'opérateur '=' mais cela peut être '<', '>' etc...
* **Valeur** : la valeur à laquelle comparer la variable employée. La valeur doit être du même type que la variable et peut bien sûr être le contenu d'une autre variable.
* **Si égal** : si le résultat de la comparaison est VRAI, alors le script se poursuivra sur la ligne indiquée.
* **Si différent** : si le résultat de la comparaison est FAUX, alors le script se poursuivra sur la ligne indiquée.
Vous noterez que les lignes indiquées ne correspondent pas aux boîtes de dialogue où l'on doit se diriger, et pour cause pour l'instant notre conditionnelle se trouve à la fin du script. Pour qu'elle ait une véritable utilité, nous allons la placer en deuxième position, comme suit :
{{ :fr:tuto3_ecran3-1-1.jpg?direct& |}}
A présent nous pouvons exécuter notre script. S'affiche donc en premier :
{{ :fr:tuto3_bdd_insert.jpg?direct& |}}
Nous validons la réponse standard car nous voulons voir s'afficher le message pour une valeur vraie. S'ensuit donc :
{{ :fr:tuto3_bdd_result.jpg?direct& |}}
Bingo ! Nous avons bien le bon résultat. Cependant...
{{ :fr:tuto3_falsemessage.jpg?direct& |}}
Le message pour la valeur fausse s'affiche aussi ! Pourquoi ? Simplement que l'on n'a jamais dis au programme de s'arrêter après avoir obtenu la bonne boîte de dialogue ! Rappelez-vous : le script ne s'arrête que s'il ne reste aucune action à effectuer. Alors comment stopper le programme lorsque l'on arrive à la boîte de dialogue "VRAI" ?
==== La condition d'arrêt ====
Pour cela, nous allons utiliser un nouveau type d'action : l'action "**Stop**".
Cette action permet de dire au script de s'arrêter une fois cette instruction atteinte. Elle prend tout son sens ici car nous allons nous en servir pour arrêter le script une fois la boite de dialogue "VRAI" atteinte. Modifiez donc le script de cette façon :
{{ :fr:tuto3_ecran3-1-2.jpg?direct& |}}
Si vous exécutez le script, ce coup-ci aucune boite "indésirable" ne s'affiche.
Sauf que...
Essayez d'exécuter le programme à nouveau mais en mettant une autre réponse qu'"//Actionaz//". Le script se termine aussitôt, sans montrer de boite de dialogue.
Lorsqu'on y réfléchit, nous avons demandé à notre conditionnelle de nous envoyer à la **ligne 004** du script si la réponse est fausse. Or, cette position n'est plus utilisée par la boite de dialogue, mais //par l'action Stop// !
Alors que faire ?
==== Les labels ====
En réalité, utiliser des lignes comme référence dans les conditionnelles est une mauvaise idée. Lorsque vous créerez vos propres scripts, vous aurez tendance à le modifier souvent, et donc à changer constamment l'ordre des lignes. Imaginez un instant un script avec une dizaine de Condition de variable à mettre à jour dès que vous insérez une ligne !
Pour contrer ce problème, Actionaz possède un système de "**labels**", qui permet de démarquer une ligne des autres afin d'être appelée par les conditionnelles plus facilement.
Pour les utiliser, double-cliquez sur les numéros associés aux lignes des boites de dialogue, dans la colonne **//"Ligne / ID"//**. Vous pouvez à présent éditer ces numéros. Remplacez-les par les labels "vrai" et "faux", respectivement associés aux boites de dialogue VRAI et FAUX. Vous devez obtenir ceci :
{{ :fr:tuto3_labels.jpg?direct& |}}
A présent, modifions les paramètres de la Condition de variable :
{{ :fr:tuto3_sendto.jpg?direct& |}}
Ici nous avons remplacé les lignes de tout à l'heure par les labels que nous venons d'écrire.
Relançons le script à présent. Cette fois-ci, tout ce déroule à merveille !
**Utilisez au maximum les labels** ! Non content d'aider à construire vos conditionnelles, elle rendrons votre script plus lisible !
===== L'action Condition Temporelle =====
Nous avons vu la Condition de variable. Passons maintenant à une conditionnelle moins utilisé : la **Condition temporelle**.
Une condition temporelle ne compare pas de variable, mais deux dates et heures : celles que vous indiquez, et celles qui sont actuelles. En fonction du résultat de la comparaison, comme la Condition de variable, vous pouvez diriger le script vers tel ou tel ligne.
L'action Condition temporelle se paramètre de cette façon :
{{ :fr:tuto3_conditiont.jpg?direct& |}}
Voyons les paramètres en détails :
* Date : la date et l'heure que vous voulez comparer à la date et l'heure courante.
* Si avant : Si l'on est avant la date et l'heure indiquée, aller à la ligne indiquée
* Si maintenant : Si l'on est pendant la date et l'heure indiquée, aller à la ligne indiquée
* Si après : Si l'on est après la date et l'heure indiquée, aller à la ligne indiquée
Pour une fois, n'écrivez pas directement la date inscrite dans l'image, mais une date un peu plus proche de la votre. Une minute plus tard, par exemple.
{{ :fr:tuto3_fenetre3-2.jpg?direct& |}}
Placez l'action à la fin de votre script, puis exécutez-le.
Essayez de rentrer un nom faux pour le programme : la boite de dialogue FAUX apparaît alors, puis... on revient à la ligne d'Entrée de texte. En fait, le script est écrit ici de façon à "boucler" tant que l'on n'a pas dépassé l'heure indiquée dans la Condition temporelle.
Patientez le temps de dépasser la valeur indiqué, puis recommencez. Cette fois-ci, le programme se termine.
La Condition temporelle est très utile lorsqu'il s'agit de "programmer" une action, de la prévoir pour une date ultérieure. Pour enregistrer votre émission de télé par exemple. Ou vérifier vos mails. Vous pouvez ainsi laisser votre script tourner en tâche de fond, de façon à ce qu'il ne commence à agir qu'à partir d'un moment précis.
Sans le savoir, vous venez ici de faire votre premier **branchement conditionnel**, ou "**boucle**". Nous verrons plus en détail cet outil dans le prochain tutoriel.
===== Téléchargements =====
Vous pouvez télécharger ici les scripts utilisés dans le tutoriel :
* {{:fr:tutoriel_3-1.ascr|Script Tutoriel 3-1}}
* {{:fr:tutoriel_3-2.ascr|Script Tutoriel 3-2}}