Estructuras condicionales en AppleScript

En AppleScript, al igual que en otros lenguajes de programación, existen ciertas estructuras de código para controlar el flujo de ejecución de nuestro programa. Recordemos que un script es un programa con ciertas características especiales.

La estructura más simple es la sentencia que se puede resumir como una orden que indica al programador a su programa. Un ejemplo sería la línea de código con la sentencia say que hemos visto en el ejemplo de Hola mundo de esta serie de artículos.

Otro ejemplo sería la línea de asignación de un valor a una variable.

Estructuras condicionales

Hasta ahora sólo sabemos crear AppleScripts que ejecuten una sentencia detrás de otra, almacenando información y manipulándola. ¿Pero podemos controlar aún más el flujo de ejecución?

Imaginemos que un trozo de nuestro script se ejecute a partir de una hora determinada, por ejemplo, un aviso para el usuario. Lo primero que debemos hacer es obtener la hora actual. Este ejemplo nos explica cómo hacerlo:


(*
Ejemplo para obtener la hora actual
*)
on run
set fecha to current date
set hora to fecha's hours
end run

En la variable hora se almacena el valor numérico de la hora actual.

Estructura if then

Para poder ejecutar un trozo de código si se cumple una condición debemos utilizar una estructura condicional. La estructura condicional más básica, y común a muchos lenguajes de programación, es la estructura if-then. La traducción al castellano de if, then es si, entonces….

Veamos su sintaxis en AppleScript para entenderla mejor:

if condición a cumplir then
código a ejecutar
end if

En la condición a cumplir se debe indicar una comparación u operación que devuelva un valor verdadero o falso. Ejemplo de esto son operaciones comparativas del tipo A < B, A = B, Nombre = “Jonathan”

Ampliemos nuestro ejemplo anterior para dar un mensaje por voz si la hora es mayor o igual a siete. El ejemplo quedaría así:


(*
Ejemplo para dar un aviso según la hora
*)
on run
-- obtenemos la fecha
set fecha to current date
set hora to fecha's hours
-- según la hora damos el aviso
if hora >= 7 then
say "¡Despierta! Ya es tarde"
end if
end run

En este ejemplo vemos otra forma de incluir comentarios: escribiendo dos caracteres de guión consecutivos (-) indicamos que lo que hay a la derecha de esa línea es un comentario de código. Es una forma de incluir comentarios de forma rápida.

Estructura if then else

El ejemplo anterior sólo nos avisará si son las 7 o más tarde pero no hará nada si es antes de las siete. A veces nos interesa realizar operaciones distintas tanto si se cumple la condición como si se cumple lo contrario. Una forma de hacer esto sería declarar dos estructuras if then con condiciones contrarias. Un ejemplo de esto sería:


(*
Ejemplo 2 para dar un aviso según la hora
*)
on run
-- obtenemos la fecha
set fecha to current date
set hora to fecha's hours
-- según la hora damos el aviso
if hora >= 7 then
say "¡Despierta! Ya es tarde"
end if
if hora < 7 then say "Todavía es temprano. Aprovecha." end if end run

Aunque esta solución pueda considerarse válida resulta poco eficiente y complica el código. Es poco eficiente porque para hacer una acción u otra realiza dos comparaciones. El código resulta más confuso porque ambas estructuras resultan iguales salvo por un signo matemático pudiendo provocar la confusión del programador.

AppleScript, como otros lenguajes, proporciona una solución elegante para cuando queremos ejecutar un trozo de código tanto para cuando se cumple una condición como para cuando se cumple la contraria. Veamos el ejemplo con esta nueva estructura condicional mejorada:


(*
Ejemplo 3 para dar un aviso según la hora
*)
on run
-- obtenemos la fecha
set fecha to current date
set hora to fecha's hours
-- según la hora damos el aviso
if hora >= 7 then
say "¡Despierta! Ya es tarde"
else
say "Todavía es temprano. Aprovecha."
end if
end run

Como se ve en el código aparece la palabra reservada del lenguaje else. Esta partícula nos permite incluir una separación en la estructura condicional para indicar que el código a continuación se ejecutará sólo si no se cumple la condición. La sintaxis completa es:

if condición a cumplir then
código a ejecutar cuando se cumple la condición
else
código a ejecutar si no se cumple la condición
end if

Ahora podemos crear scripts más complejos que realicen operaciones según se cumplan o no ciertas condiciones.

6 comentarios en “Estructuras condicionales en AppleScript

  1. Hola: oye gracias por publicar este tipo de post. Yo quiero aprender a hacer estas cosas y en español no encuentro material.
    Gracias por el trabajo que te pegas para ayudar a los que no sabemos ni buscar.

  2. me he leído tus entradas sobre Apple script, me he leído muchísima información, y seré medio tonto, por que no le veo utilidad. Seguramente hay algo que se me escapa, pero voy a plantear lo que he sacado en claro.

    Teniendo en cuenta lo que hemos visto hasta ahora, lo que tenemos no es más que un archivo que ejecuta una sentencia tras otra, como bien has dicho en la entrada, y que además tenemos la posibilidad de usar variables para usar sus valores, y también podemos aplicar condiciones, para que si pasa x, se ejecute y.

    pero he aquí mi duda:

    ¿Que sentido tiene, si las variables y las condiciones tenemos que definirlas nosotros, y no podemos cambiarlas? Probablemente me esté yo perdiendo algo y sea demasiado obvio, pero actualmente lo que podemos hacer no es más que ejecutar un archivito que tras hacer la acción (o las acciones) escritas en el, se cierra, no pudiendo interactuar con el el usuario. Ojo, reitero que solo teniendo en cuenta lo visto hasta ahora, que quizás sea la razón de mi “desorientación”.

    algo me estoy perdiendo yo aquí, pero a esto por separado, no le veo yo mucha utilidad. Quizás si lo combinamos con Automator si que se vea algo, pero aún así no me termina de cuadrar. No se que es, pero algo se me escapa.

    ¿Podría por ejemplo programar un script que generara números entre x y X?
    Según lo visto, poderse se podría. Pero ¿Podría darle al usuario la opción de introducir entre cuales de esos números?

    No se si sabes donde quiero llegar, no he visto todavía algo que diga… tiene utilidad. Aún no he visto algo que sea útil y que se haya realizado con los scripts de apple. No digo que no sirva para nada, solo que no termino de verle lo útil, quizás por falta de imaginación.

    Eso si, si puedes sigue explicando, eres un crack, y hasta torpes como yo nos enteramos de las cosas.

    1. Hola,

      He querido ir explicando las cosas poco a poco.
      El tema de las variables es para que veáis cómo se manejan. Ahora vemos que asignamos nosotros valores desde el código pero también podemos asignarle valores desde otras funciones o programas.
      Con lo que llevamos explicado hasta ahora podrías crear un appleScript para que te diga la hora.
      Pronto veremos cómo permitirle al usuario introducir información y más cosas.

      Yo, por ejemplo, con AppleScript me he creado algunos scripts para conocer el nombre del estilo que usa el texto seleccionado en Pages, no el tipo de letra sino el nombre que le he dado a ese estilo. También me he hecho un script para hacer capturas de pantalla tras 5 segundos para poder capturar el rotor en Safari. También tengo un script, creo que lo publiqué en el blog, para saber el nivel de indentación del texto…. en resumen, se pueden hacer muchas cosas pero hay que ir despacio.

      Me alegro que te guste el mini-curso

  3. hola Jonathan, felicitaciones por tu página; tiene todo lo que las personas que quieren informarse sobre tiflotecnología necesitan.
    Me está rondando la idea de empezar a programar apps para iOs 6, pero no conozco sobre que es lo que se utiliza para hacerlo; ya que hasta ahora, solo he venido programando para windows.
    No sé si me podrías decir cuáles son las herramientas a utilizar para realizar apps para este sistema operativo.
    saludos

    1. Hola

      Para desarrollar aplicaciones nativas necesitas un Macintosh y el programa xCode, Pero también puedes hacer aplicaciones multiplataforma a través de la web usando HTML, CSS, JavaScript y otras tecnologías de la web

  4. hola la segunda opción es la que me interesa por ahora… muchas gracias por la respuesta. y para vender por la app store que hay que hacer?

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.