Les structures de contrôle
  Les structures de contrôle permettent de traiter conditionellement un bloc d'instructions ou de les traiter répétitivement.
Les structures des langages classiques ont été redéfinies en Scriptol pour éliminer les causes d'erreurs fréquentes, la plus commune étant la boucle sans fin, et pour appliquer le concept de "pattern-matching" dont les programmeurs apprécient la lisibilité qu'elles apportent...

Les structures de contrôle sont:

if
  if normal.
  if une instruction.
  if composite.

for
  for normal.
  for une instruction.
  - options: in intervalle, in séquence.

scan
  by fonction.
  scan une instruction.
  scan balisé.

while
  while normal.
  while une instruction.
  - options: let, forever

do while
  normal.
  case / else / always.
  - option: forever.

do until

enum
  simple enum.
  enum dictionnaire.

Scriptol a une syntaxe différente pour les structures de contrôle d'une ligne, ou multi-lignes.

Structure multi-lignes

Une structure de contrôle a généralement la forme:

nom-structure expression [:]
... instructions ...
/nom-structure

Le symbole deux-points est optionel, sauf si une instruction est mise sur la même
ligne. Toutes les sortes de structures peuvent être imbriquées l'une dans l'autre. Chaque instruction dans le corps d'une structure est terminée, soit par la fin de ligne, soit par un point-virgule.


Structure à Instruction unique

Un structure de contrôle d'une seule instruction a la forme:

mot-clé expression let instruction
ou mot-clé expression ? instruction
ou mot-clé expression instruction (commençant par un mot-clé).

 Il n'y a pas d'autre marqueur de fin que la fin de ligne. L'instruction est basique et ne peut être un autre construct.
L'instruction "let" est toujours la dernière partie d'une structure de contrôle et peut être la seule.
Le symbole "?" est simplement une abbréviation de "let". Il est requis si l'instruction est un assignement ou un appel de fonction, mais optionel si un mot-clé le suit.
Si le mot-clé "else" ou "let" complète la structure de contrôle sur la même ligne,
un point-virgule doit terminer l'instruction pour la séparer du mot-clé.

Pourquoi la forme monoligne

 Souvent l'instruction "if" est utilisée pour exécuter sous condition une instruction unique, comme break, print, etc... et la syntaxe devrait être simplifiée alors. Et aussi, quand une instruction termine le traitement, il ne semble pas naturel que le code ajoute quelque chose après.

Par exemple:
if condition : break; /if
ou
if condition : return; /if

Le /if semble inutile puisqu'on ne l'atteint pas, aussi Scriptol permet de le supprimer, grâce à la syntaxe d'instruction unique qui utilise le mot-clé let.
Le mot let signifie Last, Execute, Terminate (dernier, exécute, termine).
L'instruction let est toujours la dernière partie d'une structure de contrôle. Quand let est suivi d'un mot-clé (break, print, ...) il peut être omis, (pas à la fin d'un while).

Quand la condition est suivie par let plutôt que par : ou une fin de ligne, puisque let est toujours la dernière instruction, cela signifie que le corps de la structure est une instruction unique, et ne peut avoir plus d'une instruction.
Cette règle s'applique à toutes les structures de contrôle sauf do qui n'a pas de condition au début.

Syntaxes:

if condition let instruction
if condition let instruction; else instruction
while condition let instruction; let incrementing
while condition let instruction
for range let instruction
scan arrays let instruction

Exemples if x = 5 let y = a + 3
if x < 10 break
if (x + y) = 0 print "some text"
if a < 10 print "less"; else print "more"
for w in array1 print w
scan a,b let a[] * b[]


Si vous avez déja utilisé d'autres langages de programmation, vous serez
surpris par les différences entre leurs structures de contrôles et la puissance de celles de Scriptol. La structure if, non seulement combine la puissance du if et du swith de C++ par exemple, mais elle permet aussi de tester des cas de types variés, et d'utiliser des opérateurs différents. Les structures de Scriptol on été définies pour une programmation plus intuitive et pour traduire directement la pensée en programme.


 Exercices

1) Soit une structure classique:
int i
for i in 1 .. 3
    i * 2
/for

Convertissez la en une structure d'une ligne.

2) Faites de même avec la structure:
int i
for i in 1..3
  print i * 2
/for


Réponses