Risparmia tempo e fatica con i loop ripetuti di AppleScript

Continuando nella nostra serie in corso di articoli AppleScript, oggi impareremo a conoscere la potenza dei loop ripetuti, che possono far risparmiare un sacco di fatica automatizzando attività ripetitive e gruppi di comandi. Dopo aver imparato a utilizzare le ripetizioni, sarai in grado di ridurre in modo significativo la quantità di lavoro necessaria per automatizzare le attività, il che si traduce in una codifica più rapida e semplice e una maggiore produttività.


Altri fantastici tutorial AppleScript

Prima di iniziare a conoscere i loop di ripetizione, assicurati di dare un'occhiata ad alcuni dei nostri precedenti tutorial AppleScript.

  • The Ultimate Beginner's Guide di AppleScript
  • Tecniche avanzate di AppleScript
  • If e If Else: dichiarazioni condizionali AppleScript
  • Avvia le tue app preferite in gruppi con AppleScript

Ripeti la gioia sonora

Se lo hai fatto bene la prima volta, non è sufficiente?

Se hai mai fatto una programmazione o uno scripting prima, sai che i loop sono assolutamente fondamentali per compiere quasi un'impresa significativa. Tuttavia, se sei nuovo all'idea di programmare, ti starai chiedendo perché diavolo vorresti ripetere qualcosa. Se lo hai fatto bene la prima volta, non è sufficiente?

La risposta, naturalmente, sta nel fatto che lavoriamo spesso con enormi quantità di dati. Se hai cinquecento immagini in una cartella e vuoi fare qualcosa per ognuna di esse, puoi digitare lo stesso comando cinquecento volte, mirandole su un file diverso ogni volta, oppure utilizzare un ciclo ripetuto e salvare il tuo salute mentale.


La struttura di un ciclo di ripetizione

Se leggi il mio precedente articolo sulle affermazioni condizionali, la struttura di un ciclo ripetuto dovrebbe essere familiare. Come con molti altri costrutti AppleScript, il ciclo ripetuto forma un blocco di codice con un inizio e una fine.

[AppleScript]
ripeti 3 volte
--comandi da ripetere
fine ripetizione
[/ AppleScript]

Come puoi vedere, la riga iniziale inizia con "repeat" e quindi delinea i termini della ripetizione. La sezione centrale è dove verranno posizionati tutti i vari comandi da ripetere e l'ultima riga informa il compilatore che questo è dove termina il ciclo.


La struttura di un ciclo ripetuto.

L'esempio di codice qui sopra è piuttosto semplice grazie all'elevato livello di leggibilità di AppleScript. Qualsiasi cosa all'interno di questo blocco ripetuto verrà ripetuta tre volte, quindi lo script si sposterà (a meno che non ci sia un'azione di terminazione nella ripetizione).

Una cosa che vorrete tenere a mente è che il vostro codice deve essere scritto in modo tale che la ripetizione faccia effettivamente qualcosa di utile. È spesso il caso che una determinata sezione di codice sia la stessa sia che la si esegue una volta o mille volte. Spetta a te modellarlo in modo tale che la ripetizione causi progressi. Vedremo come farlo mentre apprendiamo i diversi tipi di ripetizioni disponibili.


Tipi di cicli ripetuti

In un precedente articolo, abbiamo parlato di come puoi variare il tuo Se dichiarazioni considerevolmente attraverso diverse combinazioni di se altro e altrimenti se. I loop di ripetizione possono ottenere un livello di variazione ancora più elevato perché in AppleScript ci sono molti tipi diversi di loop di ripetizione. Andiamo su ciascuno e come funziona.

Un ciclo infinito

Il primo tipo di ripetizione è un ciclo infinito. Ciò si verifica se utilizziamo semplicemente un blocco di ripetizione senza modificatori di alcun tipo.

[AppleScript]
imposta x su "monotonia"
ripetere
mostra la finestra di dialogo x
fine ripetizione
[/ AppleScript]

Se si esegue questo script, andrà per sempre, visualizzando una finestra di dialogo ogni volta che viene eseguita. Esistono pochissimi casi di utilizzo pratico in cui si desidera una ripetizione infinita, quindi, come regola generale, assicurarsi di aggiungere sempre codice aggiuntivo a quella ripetizione che regola la durata o il conteggio della ripetizione.

Ripeti un numero specifico di volte

Il prossimo tipo di ripetizione è stato mostrato nel nostro primo esempio di codice sopra. Qui è dove dichiariamo specificatamente quante volte vogliamo ripetere un pezzo di codice. Ecco un esempio:

[AppleScript]
ripeti 2 volte
mostra la finestra di dialogo "Ciao!"
fine ripetizione
[/ AppleScript]

In questo codice, richiamiamo una finestra di dialogo contenente un messaggio semplice. Il blocco di ripetizione è impostato per eseguirlo due volte, quindi non appena l'utente fa clic su uno dei pulsanti nella prima finestra di dialogo, ne verrà visualizzato un altro al suo posto.


La stessa finestra apparirà due volte.

Come ho già detto, ripetere la stessa identica cosa due volte non è così utile. Quello che dobbiamo fare invece è capire come modificare l'output. Vediamo se riusciamo a eseguire il blocco di ripetizione due volte, ma ogni volta visualizziamo un messaggio diverso.

[AppleScript]
imposta iMessaggi su "Ciao!", "Impariamo su AppleScript!"
imposta da x a 1

ripeti 2 volte
visualizza finestra di dialogo (elemento x dei messaggi)
imposta x su (x + 1)
fine ripetizione
[/ AppleScript]

Questo potrebbe sembrare un po 'confuso, ma non preoccuparti, è davvero semplice. Iniziamo dichiarando una lista. Un elenco ti consente di racchiudere più parti di dati in un'unica variabile. Qui abbiamo preso due stringhe diverse e le abbiamo lanciate in "theMessages". Possiamo accedere a ciascuna voce dell'elenco in base al suo numero. Quindi "Ciao!" è "elemento 1 dei messaggi"e" Impariamo su AppleScript! "è"elemento 2 dei messaggi".

Successivamente, sfruttiamo un costrutto estremamente importante: un contatore. Questo è il segreto per fare una ripetizione fare qualcosa di diverso ogni volta che viene eseguito. Per questo esempio, abbiamo impostato X uguale a 1, quindi abbiamo incrementato X alla fine della ripetizione. In questo modo, ogni volta che viene eseguita la ripetizione, il valore di X aumenta di uno.

L'effetto che questo ha sul nostro codice è profondo. La prima volta che viene eseguita la ripetizione, X è uguale a 1, quindi è possibile accedere all'elemento 1 della nostra lista e il nostro primo messaggio viene visualizzato nella finestra di dialogo. Quindi il valore di X in aumento a due, che fa sì che il secondo messaggio venga visualizzato la seconda volta durante la ripetizione.


Questa volta, vengono visualizzati due messaggi diversi.

Mancia: Si noti che dobbiamo usare un numero (2) in una ripetizione specifica, precisando di ripetere qualcosa "due volte" non funzionerà.

Ripeti con intervallo di numeri

Se stai cercando di scorrere qualcosa attraverso una variabile incrementale, c'è un modo più succinto per farlo rispetto a quello che abbiamo visto nel nostro esempio precedente. Usando il ripetere con costruisci, impostiamo un contatore che è integrato direttamente nel nostro ciclo e accessibile dal codice interno. Vediamo come appare modificando il precedente esempio di codice:

[AppleScript]
imposta iMessaggi su "Ciao!", "Come stai?", "Impariamo su AppleScript!"

ripetere con n dall'1 al 3
display dialog (item n ofMessages)
fine ripetizione
[/ AppleScript]

Come puoi vedere, questa volta abbiamo tre messaggi da scorrere. Si noti che il nostro codice è stato in realtà semplificato. Abbiamo eliminato la creazione e l'incremento di una variabile e invece abbiamo detto al blocco di ripetizione di "ripetere con n da 1 a 3".

Ciò che fa è creare una variabile n, quindi incrementalo di uno ogni volta che il blocco si ripete. I numeri di partenza e di arrivo sono determinati dalla parte "da 1 a 3". Quindi la prima volta che viene eseguito, n sarà uguale a 1, quindi 2 alla prossima e infine a 3 l'ultima volta.

Rende facile e veloce l'accesso alla variabile di conteggio ripetere con una struttura di ripetizione estremamente utile. Ti troverai spesso a usarlo.

Ripeti con la lista

C'è un'altra forma di a ripetere con blocca quello che elimina i numeri e invece è strutturato in modo specifico per scorrere le voci di un elenco. Questo è esattamente ciò che stavamo cercando di ottenere, quindi questo è perfetto per il nostro esempio. Ecco il nostro blocco di ripetizione, semplificato ancora una volta.

[AppleScript]
imposta iMessaggi su "Ciao!", "Come stai?", "Impariamo su AppleScript!"

ripetere con il messaggio in Messaggi
visualizza il messaggio di dialogo
fine ripetizione
[/ AppleScript]

Questa volta, diciamo a AppleScript di ripetere il blocco di codice con Messaggio variabile nella lista theMessages. Ciò significa che il blocco di codice verrà eseguito una volta per ogni elemento nel nostro elenco. Quindi, in questo caso, verrà eseguito tre volte. Ogni volta che viene eseguito, il contenuto dell'elemento della lista corrente viene inserito nel nostro Messaggio variabile, che accediamo successivamente al nostro comando di visualizzazione.

Ripeti mentre

Il prossimo ciclo di ripetizione che puoi sfruttare nel tuo codice è ripetere mentre. Questo è facile da capire ma ancora super potente. Fondamentalmente, ti permette di ripetere un dato blocco di codice mentre un dato booleano è vero. Ecco un semplice esempio che non fa molto, ma illustra il punto:

[AppleScript]
imposta x su vero
imposta y su 0

ripeti mentre x
se y> 10 allora
imposta x su falso
altro
imposta da y a y + 1
finisci se
fine ripetizione
[/ AppleScript]

In questo script, il blocco di codice si ripeterà all'infinito finché X è vero. Tuttavia, all'interno della ripetizione, abbiamo impostato X a false se y è maggiore di 10 e aumentalo altrimenti. Ciò significa che il codice può essere ripetuto solo poche volte, perché alla fine y sta per arrivare a 10 e poi la ripetizione si fermerà.

Nota che avrei potuto usare anche questa struttura:

[AppleScript]
ripeti mentre x è vero
--codice da ripetere
fine ripetizione
[/ AppleScript]

Questo codice funziona bene, ma il "è vero" non è necessario. La ragione di ciò si trova proprio nel cuore di ciò che è un booleano e di ciò che fa. La variabile X nel nostro esempio è uguale vero, i due sono uno e lo stesso.

Ora, se vuoi capovolgerlo, puoi ripetere qualcosa finché il tuo booleano diventa vero. Funziona così:

[AppleScript]
ripeti mentre x è falso
--codice da ripetere
fine ripetizione
[/ AppleScript]

Tutto ciò sembra un po 'astratto, quindi facciamo qualcosa di interessante con a ripetere mentre ciclo continuo. Costruiremo un gioco di indovinare numeri di base. Per prima cosa, imposteremo la variabile di risposta su un numero casuale e la nostra variabile guess su 0. Successivamente, creeremo a ripetere mentre ciclo che continua fino a quando l'ipotesi dell'utente non è uguale alla risposta scelta casualmente.

All'interno della ripetizione, visualizzeremo una finestra di dialogo e imposteremo il numero restituito alla variabile guess. Questa finestra di immissione delle ipotesi persisterà fino a quando l'ipotesi non sarà corretta.

[AppleScript]
impostare la risposta al numero casuale da 1 a 5
imposta l'ipotesi a 0
ripetere mentre indovina non è uguale alla risposta
imposta l'ipotesi al testo restituito da (visualizza finestra di dialogo "Indovina ancora! Scegli un numero da 1 a 5" risposta predefinita "1") come numero
fine ripetizione
mostra la finestra di dialogo "Esatto!" e rispondi e "è la risposta!"
[/ AppleScript]


Questa finestra consente all'utente di indovinare un numero e si ripeterà finché l'ipotesi non sarà corretta.

Ripeti fino a

Il codice "ripeti mentre indovina non è uguale alla risposta" non è molto facile da leggere. Il negativo (non uguale a) lo rende confuso. Possiamo semplificarlo un po 'se noi abbandoniamo il ripetere mentre loop e invece guarda a ripetere fino a ciclo continuo. Ecco il numero indovina il gioco riscritto:

[AppleScript]
impostare la risposta al numero casuale da 1 a 5
imposta l'ipotesi a 0

ripetere fino a (guess = answer)
imposta l'ipotesi al testo restituito da (visualizza finestra di dialogo "Indovina ancora! Scegli un numero da 1 a 5" risposta predefinita "1") come numero
fine ripetizione

mostra la finestra di dialogo "Esatto!" e rispondi e "è la risposta!"
[/ AppleScript]

Come puoi vedere, questa ripetizione è molto più succinta e facile da leggere. Tieni presente che questo non sarà sempre il caso, a volte a ripetere mentre sarà quello che ti fa risparmiare il codice.

Adesso tutti insieme

Meno male! Ci sono un sacco di diversi tipi di ripetizione di loop non ci sono? Se ti senti sopraffatto, non essere. Sono tutti abbastanza semplici e rimarrai sorpreso di quanto spesso la dicitura giusta sia la prima cosa che ti viene in mente. Solo per tenerti in pista, ecco una breve lista di alcuni diversi esempi di ripetizione:

  • ripeti 5 volte
  • ripetere n volte
  • ripetere con n da 1 a 5
  • ripetere con listItem nel la lista
  • ripetere mentre X
  • ripetere mentre y è vero
  • ripetere mentre X è falso
  • ripetere fino a y
  • ripetere fino a (X > y)

Quando scrivi un ciclo ripetuto, passa sempre attraverso alcune altre strutture nella tua testa per vedere se riesci a renderlo più breve e più sintetico. Come abbiamo visto sopra, puoi davvero migliorare il tuo codice rimanendo aperto all'utilizzo di diversi costrutti.

Stay In The Loop

Ora dovresti essere un esperto dei loop di ripetizione di AppleScript. Sfruttando questi in congiunzione con Se affermazioni, che abbiamo imparato prima, sarete in grado di estrarre alcuni script incredibilmente complessi e utili.

Infatti, nel nostro prossimo articolo di AppleScript ci vorrà una pausa dalla teoria e metteremo alcune di queste conoscenze da usare con uno script pratico che è possibile implementare sul proprio sistema immediatamente. Torna presto!