Gagnez du temps et de l'énergie avec les boucles de répétition AppleScript

Dans la suite de notre série d'articles AppleScript, nous allons aujourd'hui nous familiariser avec le pouvoir des boucles de répétition, ce qui peut vous épargner des efforts considérables en automatisant des tâches et des groupes de commandes répétitifs. Une fois que vous aurez appris à utiliser les répétitions, vous serez en mesure de réduire considérablement la quantité de travail nécessaire à l’automatisation des tâches, ce qui se traduit par un codage plus rapide, plus facile et une productivité accrue..


Encore plus de didacticiels AppleScript

Avant de commencer à vous familiariser avec les boucles de répétition, consultez certains de nos précédents tutoriels AppleScript..

  • Guide du débutant ultime pour AppleScript
  • Techniques AppleScript avancées
  • Si et si sinon: instructions conditionnelles AppleScript
  • Lancez vos applications préférées dans les groupes avec AppleScript

Répétez la joie qui sonne

Si vous l'avez fait correctement la première fois, ce n'est pas assez?

Si vous avez déjà effectué de la programmation ou des scripts auparavant, sachez que les boucles sont absolument essentielles pour la réalisation de presque tous les exploits importants. Cependant, si vous êtes novice en matière de programmation, vous vous demandez peut-être pourquoi vous voudriez peut-être répéter quelque chose. Si vous l'avez fait correctement la première fois, ce n'est pas assez?

La réponse réside bien entendu dans le fait que nous travaillons fréquemment avec des quantités énormes de données. Si vous avez cinq cents images dans un dossier et que vous souhaitez modifier quelque chose, vous pouvez taper cinq fois la même commande, en la ciblant dans un fichier différent à chaque fois, ou utiliser une boucle de répétition et enregistrez santé mentale.


La structure d'une boucle de répétition

Si vous lisez mon article précédent sur les instructions conditionnelles, la structure d'une boucle de répétition devrait vous être familière. Comme dans beaucoup d’autres constructions AppleScript, la boucle de répétition forme un bloc de code avec un début et une fin..

[applescript]
répéter 3 fois
--commandes à répéter
fin de répéter
[/ applescript]

Comme vous pouvez le constater, la ligne initiale commence par "répéter" et décrit ensuite les termes de la répétition. La section du milieu est l'endroit où toutes les commandes à répéter seront placées et la dernière ligne informe le compilateur que c'est là que la boucle se termine.


La structure d'une boucle de répétition.

L'exemple de code ci-dessus est assez simple grâce au niveau élevé de lisibilité d'AppleScript. Tout ce qui se trouve dans ce bloc de répétition sera répété trois fois, puis le script continuera (à moins qu'il y ait une action de résiliation dans la répétition).

Une chose que vous voudrez garder à l'esprit est que votre code doit être écrit de manière à ce que sa répétition soit réellement utile. Il arrive souvent qu'une section de code donnée soit la même, que vous l'exécutiez une fois ou mille fois. C'est à vous de le modeler de telle sorte que la répétition fasse progresser. Nous verrons comment faire cela à mesure que nous apprenons les différents types de répétitions disponibles..


Types de boucles de répétition

Dans un article précédent, nous avons expliqué comment vous pouvez modifier votre si déclarations considérablement à travers différentes combinaisons de sinon et sinon si. Les boucles de répétition peuvent atteindre un niveau de variation encore plus élevé car il existe en réalité un grand nombre de types de boucles de répétition différents dans AppleScript. Passons en revue chacun et comment ça marche.

Une boucle infinie

Le premier type de répétition est une boucle infinie. Cela se produit si nous utilisons simplement un bloc de répétition sans aucun modificateur.

[applescript]
mettre x à "monotonie"
répéter
afficher le dialogue x
fin de répéter
[/ applescript]

Si vous exécutez ce script, il disparaîtra indéfiniment et affichera une boîte de dialogue à chaque exécution. Il existe très peu de cas d'utilisation pratiques dans lesquels vous souhaiteriez une répétition infinie. Par conséquent, en règle générale, veillez à toujours ajouter du code supplémentaire à cette instruction de répétition qui régit la durée ou le nombre de répétitions..

Répéter un nombre spécifique de fois

Le type de répétition suivant a été présenté dans notre premier exemple de code ci-dessus. C’est là que nous indiquons spécifiquement le nombre de fois où nous voulons qu’un bloc de code soit répété. Voici un exemple:

[applescript]
répéter 2 fois
Afficher la boîte de dialogue "Bonjour!"
fin de répéter
[/ applescript]

Dans ce code, nous appelons une boîte de dialogue contenant un message simple. Le bloc de répétition est configuré pour exécuter ceci deux fois. Ainsi, dès que l'utilisateur clique sur l'un des boutons de la première boîte de dialogue, un autre apparaîtra à sa place..


La même fenêtre apparaîtra deux fois.

Comme je l'ai mentionné ci-dessus, répéter deux fois exactement la même chose n'est généralement pas utile. Nous devons plutôt trouver un moyen de faire varier la production. Voyons si le bloc de répétition peut s'exécuter deux fois, mais affiche un message différent à chaque fois.

[applescript]
paramétrez les messages sur "Hello there!", "En savoir plus sur AppleScript!"
mettre x à 1

répéter 2 fois
boîte de dialogue d'affichage (élément x des messages)
mettre x à (x + 1)
fin de répéter
[/ applescript]

Cela peut sembler un peu déroutant, mais ne vous inquiétez pas, c'est vraiment simple. Nous commençons par déclarer une liste. Une liste vous permet de regrouper plusieurs éléments de données dans une seule variable. Ici, nous avons pris deux chaînes différentes et les avons jetées dans "theMessages". Nous pouvons accéder à chaque élément de la liste par son numéro. Alors "bonjour là!" est "point 1 des messages"et" Apprenons-en davantage sur AppleScript! "point 2 des messages".

Ensuite, nous tirons parti d’une construction extrêmement importante: un compteur. C’est le secret pour faire une répétition, faire quelque chose de différent à chaque fois. Pour cet exemple, nous définissons X égal à 1, alors nous avons incrémenté X à la fin de la répétition. Ainsi, chaque fois que la répétition est exécutée, la valeur de X augmente d'un.

L'effet que cela a sur notre code est profond. La première fois que la répétition court, X est égal à 1, le point 1 de notre liste est utilisé et notre premier message est affiché dans la boîte de dialogue. Alors la valeur de X est porté à deux, ce qui provoque l'affichage du deuxième message une deuxième fois par la répétition.


Cette fois, deux messages différents sont affichés.

Pointe: Notez que nous devons utiliser un numéral (2) dans une répétition spécifique, épeler pour répéter quelque chose "deux fois" ne fonctionnera pas.

Répéter avec la plage de numéros

Si vous souhaitez faire défiler quelque chose avec une variable incrémentielle, il existe une façon plus succincte de procéder que celle décrite dans notre exemple précédent. En utilisant le répéter avec Construire, nous mettons en place un compteur qui est construit directement dans notre boucle et peut être consulté à partir du code à l'intérieur. Voyons à quoi cela ressemble en peaufinant l'exemple de code précédent:

[applescript]
paramétrez les messages sur "Bonjour!", "Comment allez-vous?", "Apprenons-en davantage sur AppleScript!"

répéter avec n de 1 à 3
boîte de dialogue d'affichage (élément n des messages)
fin de répéter
[/ applescript]

Comme vous pouvez le constater, cette fois-ci, nous avons trois messages à parcourir. Notez que notre code a en réalité été simplifié. Nous avons supprimé la création et l’incrémentation d’une variable et demandé au bloc de répétition de «répéter avec n de 1 à 3»..

Cela crée une variable n, puis incrémentez-le d'un à chaque fois que le bloc se répète. Les numéros de départ et d'arrivée sont déterminés par la partie "de 1 à 3". Donc, la première fois, c'est exécuté, n sera égal à 1, puis 2 la prochaine fois, et enfin 3 la dernière fois.

Un accès rapide et facile à la variable de comptage répéter avec une structure de répétition extrêmement utile. Vous vous retrouverez à l'utiliser fréquemment.

Répéter avec la liste

Il y a une autre forme de répéter avec bloc qui divise les nombres et est à la place spécialement structuré pour parcourir les éléments d’une liste. C’est exactement ce que nous essayons de réaliser, c’est donc parfait pour notre exemple. Voici notre bloc de répétition, encore simplifié.

[applescript]
paramétrez les messages sur "Bonjour!", "Comment allez-vous?", "Apprenons-en davantage sur AppleScript!"

répéter avec message dans les messages
afficher un message de dialogue
fin de répéter
[/ applescript]

Cette fois, nous demandons à AppleScript de répéter le bloc de code avec message variable dans la liste les messages. Cela signifie que le bloc de code sera exécuté une fois pour chaque élément de notre liste. Donc dans ce cas, ça va courir trois fois. Chaque fois qu’il est exécuté, le contenu de l’élément de la liste en cours est placé dans notre message variable, à laquelle nous accédons plus tard dans notre commande de dialogue d'affichage.

Répéter pendant

La prochaine boucle de répétition que vous pouvez exploiter dans votre code est répéter tout en. Celui-ci est facile à comprendre mais toujours super puissant. Fondamentalement, il vous permet de répéter un bloc de code donné alors qu'un booléen est vrai. Voici un exemple simple qui ne fait pas grand chose, mais illustre le point:

[applescript]
mettre x à true
mettre y à 0

répéter tant que x
si y> 10 alors
mettre x à faux
autre
mettre y à y + 1
fin si
fin de répéter
[/ applescript]

Dans ce script, le bloc de code se répète indéfiniment tant que X est vrai. Cependant, dans la répétition, nous mettons X à faux si y est supérieur à 10, et l'augmenter autrement. Cela signifie que le code ne peut être répété que quelques fois car finalement y va arriver à 10, puis la répétition s'arrête.

Notez que j'aurais pu utiliser cette structure aussi:

[applescript]
répète tant que x est vrai
--code à répéter
fin de répéter
[/ applescript]

Ce code fonctionne très bien, mais le "est vrai" n'est pas nécessaire. La raison en est au cœur de ce qu’est un booléen et de ce qu’il fait. La variable X dans notre exemple égale vrai, les deux sont un et le même.

Maintenant, si vous voulez inverser la tendance, vous pouvez répéter quelque chose jusqu'à ce que votre booléen devienne vrai. Cela fonctionne comme suit:

[applescript]
répète tant que x est faux
--code à répéter
fin de répéter
[/ applescript]

Tout cela semble un peu abstrait, alors faisons quelque chose d’intéressant avec un répéter tout en boucle. Nous allons construire un jeu de devinette de base. Tout d’abord, nous allons définir la variable de réponse sur un nombre aléatoire et notre variable de type devin sur 0. Nous allons ensuite créer un répéter tout en boucle qui continue tant que l'estimation de l'utilisateur n'est pas égale à la réponse choisie de manière aléatoire.

Dans la répétition, nous afficherons une boîte de dialogue et définirons le nombre renvoyé dans la variable suppose. Cette fenêtre d'entrée de devinement persistera jusqu'à ce que le devin soit correct.

[applescript]
définir la réponse à un nombre aléatoire de 1 à 5
mettre devine à 0
répéter en supposant n'est pas égal à répondre
définissez devine sur le texte renvoyé de (boîte de dialogue d'affichage "Devinez à nouveau! Choisissez un nombre compris entre 1 et 5" réponse par défaut "1") comme numéro
fin de répéter
afficher la boîte de dialogue "C'est exact!" & répondre & "est la réponse!"
[/ applescript]


Cette fenêtre permet à l'utilisateur de deviner un nombre et se répète jusqu'à ce que la conjecture soit correcte.

Répète jusqu'à

Le code "répéter tant que deviner n'est pas égal à répondre" n'est pas très facile à lire. Le négatif (pas égal à) le rend déroutant. Nous pouvons simplifier un peu si nous abandonnons la répéter tout en boucle et au lieu de regarder à un Répète jusqu'à boucle. Voici le nombre de devinettes jeu réécrit:

[applescript]
définir la réponse à un nombre aléatoire de 1 à 5
mettre devine à 0

répéter jusqu'à (devinez = réponse)
définissez devine sur le texte renvoyé de (boîte de dialogue d'affichage "Devinez à nouveau! Choisissez un nombre compris entre 1 et 5" réponse par défaut "1") comme numéro
fin de répéter

afficher la boîte de dialogue "C'est exact!" & répondre & "est la réponse!"
[/ applescript]

Comme vous pouvez le constater, cette répétition est beaucoup plus succincte et facile à lire. Gardez à l’esprit que ce ne sera pas toujours le cas, parfois un répéter tout en sera celui qui vous enregistre le code.

Tous ensemble maintenant

Ouf! Il y a énormément de types différents de boucles de répétition, non? Si vous vous sentez dépassé, ne le soyez pas. Ils sont tous assez simples et vous seriez surpris de voir combien de fois le bon libellé est la première chose qui vous vient à l’esprit. Pour vous garder sur la bonne voie, voici une liste rapide de quelques exemples de répétition différents:

  • répéter 5 fois
  • répéter n fois
  • répéter avec n de 1 à 5
  • répéter avec listItem dans la liste
  • répéter tout en X
  • répéter tout en y est vrai
  • répéter tout en X c'est faux
  • Répète jusqu'à y
  • Répète jusqu'à (X > y)

Lorsque vous écrivez une boucle de répétition, parcourez toujours quelques autres structures dans votre tête pour voir si vous pouvez la rendre plus brève et plus succincte. Comme nous l'avons vu ci-dessus, vous pouvez vraiment améliorer votre code en restant ouvert à l'utilisation de différentes constructions..

Rester dans la boucle

Vous devriez maintenant être un expert des boucles de répétition AppleScript. En les exploitant conjointement avec si déclarations, que nous avons appris auparavant, vous serez en mesure de retirer des scripts incroyablement complexes et utiles.

En fait, dans notre prochain article AppleScript, nous allons rompre avec la théorie et utiliser certaines de ces connaissances avec un script pratique que vous pouvez immédiatement mettre en œuvre sur votre système. Revenez bientôt!