Curso Applescript: Cláusulas condicionales y «de intento» (if… else… end if/ try… end try); errores, por Julifos

Cláusulas condicionales y «de intento» (ifelse… end if/ try… end try); errores

Cláusulas condicionales: ifelse… end if

Las «cláusulas condicionales» son básicas en cualquier lenguaje de programación, y se basan en el siguiente esquema básico:

Si (esto es verdad) entonces (haz esto)

Y, opcionalmente:

Y si no (haz esto otro)

En AppleScript, siendo el sistema el mismo, pueden comprobarse múltiples condicionse en la misma cláusula. Por ejemplo:

Si (esto es verdad) entonces

(haz esto)

Sin embargo, si (esto es verdad) entonces

(haz esto otro)

Sin embargo, si (esto es verdad) entonces

(haz esto otro)

Por último, si (nada de lo anterior es cierto) entonces

(haz esto de más allá)

Pues vaya el primer ejemplo, lo mismo, pero en inglés y más abreviadito:

if 2 + 2 = 4 then

display dialog «¡Es verdad!»

end if

Como siempre, tenemos que terminar la cláusula. O sea, que siempre que hay un «if«, hay un «end if«; siempre que hay un «tell», hay un «end tell»; y así para siempre. En este ejemplo, si 2 + 2 no son 4, entonces no pasará nada.

Por poner otro caso de «if» con «else» (o sea, un «sin embargo» casero), podemos establecer otra cláusula por si resulta que 2 + 2 no es 4:

if 2 + 2 = 4 then

display dialog «¡Es verdad!»

else

display dialog «¡Es mentira!»

end if

Si 2 + 2 no fuera igual a 4, entonces tendríamos el diálogo «¡Es mentira!».

Por último, y por rehuir los ejemplos matemáticos, que tanto aburren, vamos a evaluar otro tipo de expresiones con una concatenación múltiple de probabilidades del mundo:

display dialog «¿Cuántos años tienes?» default answer «»

set edad_usuario to text returned of the result as number

if edad_usuario < 8 then

display dialog «Anda, niño, vete a dormir»

else if edad_usuario < 18 then

display dialog «No tienes la edad legal, compréndelo»

else if edad_usuario > 80 then

display dialog «Está vd. algo mayor para juegos»

else

display dialog «Tiene vd. entre 18 y 80 años»

end if

En este caso, establecemos una especie de filtro, en el cual abarcamos las posibilidades entre los años – ∝ y + ∝ (vaya, otra vez signos matemáticos). Si el usuario introduce un número, entonces recibirá un diálogo adecuado a su edad, según el número introducido.

Creo que esto es muy fácil y sólo consiste en hacer pruebas, así que no me enrollo más.

Cláusulas «de intento»: try… end try

He traducido «try» como intento porque me ha parecido lo más adecuado. Como viene siendo habitual, voy a hacer una traducción chapucera introductoria al asunto:

intenta

(hacer esto)

si no puedes

(haz esto otro)

Como siempre, tenemos varias posibilidades para el uso del invento éste del «try«, y las dos más habituales son: prevenir un posible error y como truco para comprobar una condición. Valgan como explicación estos dos ejemplos:

try

display dialog «¿Quiere seguir adelante?»

on error

return

end try

En este ejemplo se presenta al usuario un simple diálogo de confirmación con los botones estándar (dado que no hemos definido otros distintos) «Cancel» y «OK». Si el usuario piensa que «OK», entonces el script seguirá adelante sin mayor problema. Sin embargo, si el usuario decide que no quiere seguir adelante, entonces pulsará «Cancel», lo que, de manera estándar, provoca un error de tipo -128 («El usuario ha cancelado la ejecución»), gracias a lo cual pasa a ejecutarse la cláusula «on error«, que lo que hace en este caso es, realmente, cancelar la ejecución pero sin provocar desastres no-naturales.

try

sound volume

on error

display dialog «No tiene vd. instalados los Jon’s Commands»

return

end try

Este ejemplo, parecido a otro que ya hemos visto, simplemente «intenta» ejecutar comandos pertenecientes a la adición de script «Jon’s Commands», sin querer hacer nada especial, sino simplemente comprobar su existencia. Si ésta no está presente en la carpeta de «Adiciones de Script» («ScriptingAdditions» en OS X), entonces se provocará un error estándar de tipo -1708 («No entiendo el mensaje «sound volume»»), y entonces avisará al usuario de que no tiene instalados los célebres «Jon’s Commands»; acto seguido, igual que en el ejemplo anterior, el comando «return» impedirá que el script siga adelante.

Hasta el OS 9, la sub-cláusula on error es obligatoria pero, a partir de este sistema, sólo tenemos que ponerla si es que queremos «hacernos cargo» del error. Si no, bastaría con un simple «try… end try«

Errores

Brevemente: un error es un error, y se da cuando ocurre algo que hace imposible la continuación del script.

Por ejemplo:

«Valencia» + 5

Evidentemente, se produce el error «No se puede convertir Valencia en número».

Pues bien. Se puede recibir y crear errores, definiendo, opcionalmente, los siguientes parámetros:

error «mensaje» number (número) from (objeto) to (nuevo tipo) partial result (resultado parcial)

Un ejemplo sencillo recibiendo información de un error:

try

display dialog «¿Continuar?»

on error number x

if x = -128 then display dialog «Oiga, no cancele usted»

end try

Si el usuario cancela, se produce un error de tipo (número) -128 (lo sabemos porque somos muy listos), así que, previendo lo que puede pasar, actuamos en consecuencia.

Ahora, un ejemplo «divertido» creando un error:

error «Ahora mismo se borrarán todos sus archivos» number 5000

Si ejecutamos esto, se presentará un diálogo típico de que ha habido un error, en este caso de tipo 5000 (el que hemos inventado), con el mensaje que también hemos inventado. ¡Ja, jA, JA!

Para «inventar» el número del error, deberíamos utilizar, según la AppleScript Language Guide, números positivos desde el 500 al 10000, que no son utilizados por «nadie». En cualquier caso, tenemos unos cuántos para elegir, ¿no?

¿Por qué querríamos inventar un error? Pues, por poner un ejemplo, puede que estemos desarrollando un script bastante largo, que puede dar error en diversas partes del código. Si definimos errores propios en puntos críticos, un posible usuario (o nosotros mismos), sabremos en qué sitio concreto del script se ha producido el error. Porque puede que no nos valga con un simple «no puedo convertir x en integer» si estamos trabajando todo el rato con números…

Ahora supongamos que queremos extraer hasta la última gota de información de un error, porque no nos vale con un simple «ha habido un error». Queremos saber de qué se trata exactamente, y por eso utilizaremos todas las herramientas a nuestro alcance.

try

handle CGI request «káspita»

on error msg number n from obj to newClass partial result y

log {msg, n, obj, newClass, y}

end try

on handle CGI request x searching for y

return «»

end handle CGI request

He de reconocer que este ejemplo es extremadamente barroco, pero me sirve porque contiene los cinco elementos que forman un error.

Para poder verlos, tenemos que hacer correr el script desde un editor de script con la ventana «apple event log» abierta (en el «Editor de Scripts», está en el menú Controles > Abrir registro de eventos). Lo que hace el comando «log» es registrar la información en esa ventana, de la cual podemos extraer la siguiente información:

msg (mensaje del error) > «El parámetro searching for para handle CGI request no se encuentra.»

n (número de error) > -1701

obj (objeto culpable del error) > «class kfor» (a saber, el parámetro «searching for»)

newClass (lo que se esperaba) > handle CGI request (hablamos de un «class pcls»; o sea, «class» en sí mismo)

y («resultado parcial») > handle CGI request. No es lo mismo que lo anterior, sino que hace referencia al «class» del objeto «dañado»: un handler («class hand»).

Ufff…

Si, por ejemplo, en el error que sea no existe el «from» o el «to», AppleScript devuelve una lista vacía: {}.

Y, para terminar, y como dato hipotéticamente útil, un «error desconocido» tiene el número -2700.

Los restantes artículos sobe AppleScript se pueden encontrar en la categoría de Tutorial

Deja una respuesta