Bucles en AppleScript

AppleScript, al igual que otros lenguajes de programación, nos permite utilizar una serie de estructuras de código para repetir una serie de comandos un número determinado de veces. Esto resulta muy úl para evitar tener que escribir demasiado código repetido

Por ejemplo imaginemos que queremos realizar un script que cuente desde 1 hasta 10. Si no supiesemos utilizar ninguna estructura de bucle o para repetir un trozo de código nuestro script debería ser algo parecido a lo siguiente:


on run
set valor to 1
say valor
set valor to valor + 1
say valor
set valor to valor + 1
say valor
set valor to valor + 1
say valor
set valor to valor + 1
say valor
set valor to valor + 1
say valor
set valor to valor + 1
say valor
set valor to valor + 1
say valor
set valor to valor + 1
say valor
set valor to valor + 1
say valor
end run

El código escrito es repetitivo, poco elegante y poco eficiente a la hora de ser mantenido o modificado en el futuro.

Para poder solucionar este problema AppleScript nos proporciona la estructura repeat que repite un número de veces determinado el código situado entre la orden repeat y end repeat. Nuestro script anterior podría quedar así:


on run
set valor to 1
repeat 10 times
say valor
set valor to valor + 1
end repeat
end run

Al ejecutar el script obtendremos el mismo resultado pero habremos escrito menos líneas de código y además queda más claro que existe una acción repetida varias veces dentro del script.

Si en el comando repeat no indicamos el número de veces que debe repetirse el bloque de código se entrará en un bucle infinito. Por ejemplo, si cambiamos nuestro ejemplo anterior dejando la línea repeat 10 times por sólo repeat y lo ejecutamos el script no parará de contar hasta que nosotros interrumpamos la ejecución del script.

Un bucle de ejecución infinita es muy peligroso ya que provocará que nuestro ordenador entre en un proceso sin fin y cada vez haya menos recursos disponibles para la máquina. Es muy probable que hayamos visto comportamientos similares cuando nuestro teléfono u ordenador personal realiza un proceso que provoca que la temperatura del dispositivo aumenta, se ralentiza la ejecución de todo el sistema operativo y cualquier acción que intentemos se realizará de forma muy pausada y con interrupciones. Esto puede deberse a que una aplicación está ejecutando un bucle infinito o de muy larga duración, por ejemplo convertir un fichero de vídeo o un proceso que requiera de muchos minutos para completarse.

Por todo esto siempre debemos incluir cláusulas de interruptción de un bucle en cualquier lenguaje de programación que utilicemos, incluido AppleScript.

Para salir de una estructura repeat AppleScript nos proporciona el comando exit. Veamos nuestro ejemplo inicial pero utilizando un bucle infinito con su cláusula de ejecución controlada para que se termine cuando hayamos verbalizado el valor 10. El código sería el siguiente:


on run
set valor to 1
repeat
say valor
set valor to valor + 1
if valor = 11 then
exit repeat
end if
end repeat
end run

Pero este código sigue sin ser del todo apropiado. En nuestro ejemplo sabemos que queremos ir desde el valor 1 hasta el 10. En los casos en que sabemos el valor de inicio y de finalización y además necesitamos una variable que nos indique en qué número de la iteración del bucle nos encontramos el comando repeat nos permite declarar una variable para controlar el bucle e indicar el valor de comienzo y el valor de finalización para el bucle. Veamos un ejemplo para que nos diga los números entre el 10 y el 20. El código sería el siguiente:


on run
repeat with valor from 10 to 20
say valor
end repeat
end run

Es necesario tener en cuenta que la estructura repeat with from to sólo se ejecutará si el valor indicado en from es menor que el indicado en to, lo que significa que el bucle se ejecutará si se va de un número hacia otro número mayor. Por ejemplo, si intentamos hacer una cuenta atrás el script siguiente no se ejecutará:


on run
repeat with valor from 10 to 1
say valor
end repeat
end run

Para solucionar este problema debemos usar nuestro ingenio para superar las limitaciones del lenguaje de programación que estemos utilizando. Una posible solución sería la siguiente:


on run
repeat with valor from 1 to 10
set cuentaAtras to 11 - valor
say cuentaAtras
end repeat
say "¡Boom!"
end run

AppleScript proporciona otras variantes de la estructura de bucle repeat pero pueden resultar menos eficientes o más complejas de controlar. Más adelante veremos algunas de ellas.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.