Lisaac/Structures de contrôle
Dans quels délires sans nom vas tu m’entraîner pour écrire un if ?
[modifier | modifier le wikicode]Et bien, il existe un deuxième moyen d'écrire un bloc. En plus de la syntaxe avec des parenthèses que l'on a vue avant on peut utiliser la même syntaxe mais avec des accolades "{ ... }". Les blocs ainsi définis sont à évaluation paresseuse, c'est à dire qu'ils sont évalués au dernier moment. De plus ces blocs sont-eux même des objets, donc ils peuvent apparaître du côté droit d'une affectation et possèdent le type BLOCK. Ils peuvent aussi apparaître en tant qu'argument d'un slot. Dès que l'on en consulte la valeur, le code qu'ils contiennent s'évalue.
Après cela il me suffit de faire remarquer que les structures de contrôle de Lisaac ne font pas partie du langage mais sont définies dans la bibliothèque standard.
Q: Et donc cela donne quoi ?
[modifier | modifier le wikicode]Quelques exemples suffiront à eux mêmes :
+l:CHARACTER; (l == 'f'). if { "Bonjour tout le monde \n".print; }else{ "Hello World \n".print; }
Exemple de boucle avec while_do (vérification de la condition avant d'effectuer la boucle):
Section Header + name := PERROQUET; Section Public - main <- ( /* tant qu'il y a quelque chose à lire en entrée alors... * si il n'y a plus rien (ctrl+d) on sort de la boucle */ { !IO.end_of_input }.while_do { "Dit quelque chose : ".print; IO.read_line; "Perroquet répète : ".print; IO.last_string.print; "\n".print; }; );
Exemple de boucle avec do_while (vérification de la condition après l'exécution de la boucle):
Section Header + name := PERROQUET; Section Public - main <- ( /* Boucle tant que la chaîne lue n'est pas vide */ { "Dit quelque chose : ".print; IO.read_line; "Perroquet répète : ".print; IO.last_string.print; "\n".print; }.do_while { IO.last_string.count >0 }; );
Q : Comme les contrôles sont personnalisables, est-ce que cela ne risque pas de rendre le code illisible si chacun refait tout à sa sauce ?
[modifier | modifier le wikicode]Et bien premièrement, en programmation objet on a seulement besoin de connaître l'interface d'un objet pour pouvoir le réutiliser, jamais son code. Cela limite donc le problème.
Ensuite le fait de pouvoir créer des structures de contrôles personnalisées va permettre d'en fournir de nouvelles adaptées à chaque nouveau conteneur. Par exemple si vous faites une structure de données un peu inhabituelle, vous allez pouvoir fournir un moyen de l'utiliser de manière conviviale et adaptée. Cela va donc améliorer la lisibilité du code.
TODO : "for" attention il faut un bloc avec un argument.
TODO : attention a mettre un ; après chaque boucle : c'est une instruction (erreur générée : argument incorrect).