Advertisement
  1. Code
  2. Coding Fundamentals
  3. Workflow

If y If Else: Sentencias condicionales de AppleScript

Scroll to top
Read Time: 8 min

() translation by (you can also view the original English article)

Las sentencias condicionales son la columna vertebral de muchos lenguajes de programación y scripts. En AppleScript, proporcionan una forma de añadir otra dimensión de complejidad a tus scripts analizando y respondiendo a varias situaciones. Este tutorial analizará detenidamente las sentencias if y if else y las distintas formas de implementarlas en un script.


Profundizando en AppleScript

Hasta ahora hemos publicado dos artículos que son perfectos para llevarte de un completo novato a alguien que puede trabajar de forma competente con un script básico:

Estos tutoriales sirven como una visión general y te dan una buena idea de cómo funciona AppleScript, así como qué tipos de estructuras de programación están involucradas. Sin embargo, si realmente quieres convertirte en un maestro de la escritura de scripts, vas a tener que profundizar mucho más en la sintaxis y las construcciones que componen AppleScript.

No te preocupes, estamos contigo en cada paso del camino. Este es el primero de una serie de artículos en los que se analizarán a fondo diferentes aspectos de AppleScript para que puedas aprovechar su increíble potencia para automatizar tu Mac.

Consejo: Para ejecutar los scripts de este artículo, tendrás que abrir la aplicación "Editor de AppleScript", que se encuentra en Aplicaciones>Utilidades.


What if?

En AppleScript, será difícil encontrar dos caracteres que rivalicen con el poder de "if". Si aprendes a manejar correctamente esta herramienta aparentemente sencilla, llegarás lejos.

Una sentencia if básica funciona de forma muy parecida a un bloque tell. Para recordarte, esta es la estructura de un tell:

[applescript] tell application "Safari" activate end tell [/applescript]

Como puedes ver, este script ejecuta Safari. Tiene tres líneas: la primera y la última constituyen el "bloque" tell, que debe contener siempre una sentencia end. Todo lo que hay entre estas dos líneas constituye el cuerpo del bloque tell.

Las sentencias condicionales, así como muchas otras construcciones, toman prestada esta misma estructura, solo que esta vez utilizamos if en lugar de tell.

[applescript] if true then --do something end if [/applescript]

Esta estructura es bastante sencilla y debería tener mucho sentido. Primero, comienzas tu sentencia condicional y la calificas con un booleano, luego escribes tus comandos que se disparan en el caso de una verdad (truth), y finalmente, cierras tu sentencia con un end.

Anatomy of a conditional statementAnatomy of a conditional statementAnatomy of a conditional statementAnatomía de una sentencia condicional

Dato: En el Editor de AppleScript, no es necesario escribir "end if", solo "end". El compilador añadirá automáticamente el resto, incluso si tienes varias sentencias end que pertenecen a diferentes tipos de bloques. ¡Lo resuelve todo por ti!


Boolie ¿Y ahora qué?

Antes de seguir adelante, es absolutamente crítico que entiendas exactamente lo que quiero decir cuando me refiero a un booleano. Un booleano es un tipo de dato que solo puede tener uno de dos valores: verdadero (true) o falso (false). En el mundo de la informática, los absolutos existen absolutamente. O algo es, o no es, no hay un punto intermedio.

AppleScript puede averiguar fácilmente si ciertas cosas son verdaderas y utilizar este conocimiento para potenciar una sentencia condicional. Para probarlo, intenta escribir una sentencia de igualdad en el Editor de AppleScript y ejecútala.

True is returnedTrue is returnedTrue is returnedEl resultado es "True".

Como puedes ver, el compilador evaluó la sentencia "10 > 1" y devolvió correctamente "true". Si damos la vuelta al símbolo de igualdad y ejecutamos "10

ApplScript can evaluate all kinds of different statementsApplScript can evaluate all kinds of different statementsApplScript can evaluate all kinds of different statementsApplScript puede evaluar todo tipo de sentencias diferentes.

Cómo utilizan los booleanos los condicionales

Ahora que entiendes lo que es un booleano, es más fácil entender cómo funcionan los condicionales. Como vimos en el gráfico anterior, una sentencia condicional dice "if this boolean evaluates as true, then do something" (si este booleano se evalúa como verdadero, entonces haz algo).

Veamos esto en la práctica usando la sentencia "10 > 1" que probamos antes:

[applescript] if 10 > 1 then return "That's right!" end if [/applescript]

Aquí hemos sustituido la palabra "true" por algo que queremos que AppleScript evalúe. La estructura aquí es exactamente la que vimos antes:

ApplScript can evaluate all kinds of different statementsApplScript can evaluate all kinds of different statementsApplScript can evaluate all kinds of different statementsDesglose de una sentencia condicional.

Dada esta estructura, los comandos dentro de la sentencia if solo se ejecutarán si el booleano resulta ser verdadero. En este caso, la sentencia es verdadera, por lo que veremos lo siguiente en la parte de "Resultado" de la ventana del Editor de AppleScript.

ApplScript can evaluate all kinds of different statementsApplScript can evaluate all kinds of different statementsApplScript can evaluate all kinds of different statementsEl script dio como resultado "That's right!"

Condicionales de una sola línea

En caso de que te lo estés preguntando, hay una forma especial y sucinta de una sentencia if que solo ocupa una línea. No requiere un "end" y no puede soportar ninguna de las complejidades añadidas que vamos a ver en la siguiente sección, pero es útil para casos sencillos.

[applescript] --Single line if statement if 10 > 2 then return "yes" [/applescript]


Else

Las sentencias If son increíbles, pero resultan un poco limitadas en la forma que hemos visto hasta ahora. Por ejemplo, ¿qué pasaría si el booleano en el script resultara ser falso? He aquí un ejemplo:

[applescript] set x to 20

if 10 > x then return "10 is greater than " & x end if [/applescript]

Como puedes ver, estoy aumentando gradualmente la complejidad aquí para que te familiarices con patrones y construcciones comunes. En este ejemplo, primero establecemos una variable, x, y luego establecemos esa variable igual a 20. Ahora, cuando ejecutamos nuestra sentencia if, el número 10 se compara con la variable.

En este caso, 10 no es mayor que 20, por lo que el booleano será falso. Esto significa que nuestro script no hará nada en absoluto. Para solucionar este problema, recurrimos a else. Vamos a modificar un poco nuestro script:

[applescript] set x to 20

set x to 20 return "10 is greater than " & x else return "10 is not greater than " & x end if [/applescript]

Lo mejor de AppleScript es que es muy fácil de leer. Si simplemente lees este script en voz alta, podrás saber exactamente lo que hace. Este es el resumen:

  • Asigna un valor de 20 a x
  • Compara el número 10 con x para ver si 10 es mayor
  • Si 10 > x, da como resultado la siguiente sentencia
  • Si no (else), da como resultado esta otra sentencia

Dado que 10 no es mayor que 20, dará como resultado la segunda sentencia. El resultado debería ser algo parecido a esto:

ApplScript can evaluate all kinds of different statementsApplScript can evaluate all kinds of different statementsApplScript can evaluate all kinds of different statementsEl script dio como resultado "¡That's right!!"

Ahora que podemos dar cuenta de dos escenarios booleanos diferentes, estamos mucho más capacitados para enfrentarnos a retos de scripting complejos.

Else If

Como puedes imaginar, incluso esto no es suficiente para dar cuenta de todas las diferentes situaciones que te vas a encontrar. Tal vez tengamos un escenario bastante complejo en el que es posible un número de resultados diferentes.

En este escenario, podemos implementar else if para seguir añadiendo complejidad a nuestra sentencia if. Considera lo siguiente:

[applescript] set theWeekDay to weekday of (current date)

if (theWeekDay = Friday) then return "You're almost free!" else if (theWeekDay = Saturday) then return "It's the weekend!" else if (theWeekDay = Sunday) then return "Relax, for tomorrow we work." else return "Hang in there, it's not the weekend yet!" end if [/applescript]

Una vez más, incluso si no estás familiarizado con AppleScript, el lenguaje natural hace que sea bastante fácil de entender lo que está pasando. En primer lugar, establecemos una variable con el día de la semana actual. A continuación, ejecutamos una serie de pruebas utilizando if, else if y else para llegar a un mensaje de respuesta apropiado dado el día actual de la semana.

ApplScript can evaluate all kinds of different statementsApplScript can evaluate all kinds of different statementsApplScript can evaluate all kinds of different statements"Else if" en acción.

Al ejecutarse, el script probará la primera sentencia if. Si ésta resulta verdadera, la primera sentencia de respuesta se ejecutará y el script terminará (no se realizan más pasos). Sin embargo, si esa sentencia resulta falsa, se intenta el primer else if, luego el segundo y finalmente, si ninguno de ellos resulta verdadero, el último else entra en acción y nos da una sentencia sobre que todavía no es fin de semana.

Un código más ligero es mejor

La estructura else if es increíblemente poderosa y te permite tener en cuenta cualquier número de escenarios diferentes. Mientras codificas ciertos proyectos, puedes estar tentado, a veces, a encadenar cinco, diez o incluso quince sentencias else if para abarcar todas las posibilidades disponibles. Desafortunadamente, esta no es una buena manera de codificar y puede conducir a una gran cantidad de hinchazón innecesaria.

Ten mucho cuidado cuando uses else if y pregúntate si hay una mejor manera de hacer lo que estás tratando de lograr. A menudo es mucho más práctico y breve utilizar un bucle de algún tipo, pero eso es un artículo para otro día (¡próximamente!).

¿Esto o aquello?

Un último consejo sobre las sentencias if. Una alternativa a else es utilizar or en su lugar. He aquí una versión simplificada del script del día de la semana utilizando or y solo dos posibles sentencias de respuesta.

[applescript] set theWeekDay to weekday of (current date)

if (theWeekDay = Saturday) or (theWeekDay = Sunday) then return "It's the weekend!" else return "Hang in there, it's not the weekend yet!" end if [/applescript]

Mantente en sintonía

Esto cubre la mayor parte de lo que necesitas saber sobre condicionales. Abre el Editor de AppleScript y empieza a experimentar con tus propias sentencias condicionales. ¿Qué scripts geniales se te ocurrirán?

Esto es solo la punta del iceberg en cuanto a nuestra cobertura de AppleScript. Este es un tema increíblemente amplio que tiene mucho potencial para aumentar el dominio de tu Mac, así que vamos a tener muchos más tutoriales de AppleScript para ayudarte a convertirte en un verdadero experto en automatización.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.