Débuter en AppleScript
La programmation AppleScript en exemples.

cerises
Les boucles.
L'automatisation consiste généralement à réaliser une même tâche de façon itérative. On ne connait pas forcément à l'avance le nombre de fois qu'il faudra répéter une action. Pour cela, on dispose de plusieurs syntaxes de boucles qui combinent itérations définies et itérations conditionelles. Les exemples donnés ici nécessitent de cliquer sur l'onglet "Event Log" de Script Editor pour mieux visualiser les itérations.

Exemple 1 : l'itération infinie. Récupérez l'AppleScript ici.

Le Script :

set valeur to 1

repeat
set
valeur to valeur + 1
log valeur
end repeat




Explications :
On incrémente "valeur" à chaque passage. Cette boucle ne s'arrêtera que lorsque "valeur" aura dépassé la valeur maximale permise par le système.



Exemple 2 : l'itération conditionnelle. Récupérez l'AppleScript ici.

Le Script :

set valeur to 1

repeat until (valeur = 4)
set
valeur to valeur + 1
log valeur
end repeat




Explications :
Comme précédemment on incrémente"valeur" toutefois, la boucle stoppera si le test bouléen est avéré.




Exemple 3 : l'itération conditionnelle. Récupérez l'AppleScript ici.

Le Script :

set valeur to 1

repeat while (valeur 4)
set
valeur to valeur + 1
log valeur
end repeat




Explications :
La différence entre le couple "repeat until" et "repeat while" réside dans le nombre d'itération. Dans le premier cas, l'itération est stoppée dès que la condition est obtenue. Dans l'autre, on effectue des itérations jusqu'à obtention de la condition. Concrêtement, il y aura une itération de plus avec "repeat while".



Exemple 4 : l'itération par intervalle. Récupérez l'AppleScript ici.


Le Script :

repeat with valeur from 2 to 4
log valeur
end repeat



Explications :
Dans ce cas, on connait le nombre d'itération grâce à un intervalle de valeur. L'incrémentation de "valeur" est tacite.



Exemple 5 : l'itération par intervalle selon un pas. Récupérez l'AppleScript ici.


Le Script :

repeat with valeur from 2 to 8 by 2
log valeur
end repeat



Explications :
Comme précédemment on incrémente dans un intervalle, toutefois on peut spécifier le pas d'incrément. L'intervalle et le pas doivent être des valeurs entières.



Exemple 6 : l'itération dans une liste. Récupérez l'AppleScript ici.


Le Script :

set ma_liste to {1, 3, 5, 7, 11, 13}

repeat with valeur in ma_liste
log valeur
end repeat



Explications :
Il est possible de définir une liste de valeurs et effectuer les itérations du premier au dernier élément.

Astuces :
• La liste peut contenir tout type de données, ici on a choisi des valeurs numériques mais il pourrait s'agir de chaînes de caractères, de bouléens ou d'alias…
• il est possible de réaliser cette itération d'une autre façon (Récupérez l'AppleScript ici) :


set ma_liste to {1, 3, 5, 7, 11, 13}

repeat with valeur from 1 to (length of ma_liste)
log item valeur of ma_liste
end repeat


Le seul avantage de cette écriture réside dans la connaissance de "valeur" ce qui permet de connaitre la position de l'item dans la liste.




Exemple 7 : l'itération définie. Récupérez l'AppleScript ici.


Le Script :

set valeur to 1

repeat 3 times
set
valeur to valeur + 1
log valeur
end repeat



Explications :
Cette écriture est une bonne alternative à l'utilisation de "repeat until". Si le nombre d'itérations n'est pas déduit d'un calcul par exemple, on pourra préférer une syntaxe qui rend le code plus compréhensible.



Exemple 8 : l'itération à sortie conditionelle. Récupérez l'AppleScript ici.



Le Script :

repeat with valeur from 2 to 8 by 2
log
valeur
if
(valeur = 4) then exit repeat
end repeat


Explications :
On peut utiliser une syntaxe conditionnelle classique "if then" pour provoquer un arrêt anticipé des itérations avec l'instruction "exit repeat".

Astuces :
lorsqu'on réalise un test de sortie, il est important de vérifier que la condition pourra s'avérer. Récupérez l'AppleScript ici.

set ma_liste to {1, 3, 5, 7, 11, 13}

repeat with valeur in ma_liste
log valeur
if (valeur as number = 5) then exit repeat
end repeat


Ici, il faudra spécifier qu'on compare la valeur, en tant que nombre, du troisième item de la liste avec la valeur de sortie. Si on supprime "as number" du script, la boucle n'est pas stoppée avant d'atteindre le dernier item de la liste.