Curso Applescript: constantes, por Julifos

En AppleScript, una constante es lo que la misma palabreja significa en cualquier otro campo de la existencia. Algo que existe y que siempre tiene el mismo valor. Algunas de estas constantes son modificables. Otras, como veremos, no, por pura lógica.

Vamos a verlas siguiendo la AppleScript Language Guide:

Constantes aritméticas

AppleScript define dos constantes aritméticas: el número real “pi” (3.141592…) y las medidas de la constante “fecha”, que vienen a ser las horas, minutos, etc., cuando se trabaja con ellas como números. Ambas constantes son modificables, aunque sea completamente absurdo.

Pi

Esta constante también es una constante matemática (representada por la letra griega π), que tiene el valor 3.14159265359, y que resulta muy útil a la hora de realizar ciertos cálculos, como areas circulares y esas cosas extrañas. Como hemos dicho, es modificable:

set my pi to 50

Y la próxima vez que utilicemos la constante “pi”, ésta tendrá un valor de “3.2”; no sé qué utilidad puede tener esto, pero se puede hacer.

Dado que el supuesto valor de “pi” se extiende hasta el infinito, en AppleScript sólo se utilizan 11 decimales (3.14159265359), que parece ser un número bastante de decimales como para hacer cálculos suficientemente exactos, teniendo en cuenta que no vamos a utilizar AppleScript para diseñar una nave espacial.

Si, por ejemplo, deseamos ardientemente calcular el área de un círculo con un radio de 5 centímetros, entonces podríamos utilizar esta constante:

set el_radio to 5 — cm

set el_area_circular to pi ∗ el_radio ∧ 2

Vamos, muy emocionante (el simbolito ” ” significa “elevado a”; o sea, la potencia “x” de un número).

Medidas de “Fecha”

Por ejemplo, el valor constante de un minuto es el número entero 60 (segundos, que es la unidad mínima de tiempo que define AppleScript).

Por tanto, el valor de una hora será de 3600 (60 minutos ∗ 60 segundos). Un ejemplo de cálculo que se puede realizar con estas constantes es:

set segundos_de_esperar_a_Ana to 3 ∗ hours

Que es la nada despreciable cantidad de 10800 segundos.

Este ejemplo es un poco estúpido, pero sirve para explicar lo que significa una constante. Habitualmente, los cálculos que se hacen con estas constantes sirven para manipular fechas, y la “mayor” de estas constantes es “semanas”: weeks. También dejo caer que no se puede operar con segundos (seconds), aunque también son una constante.

set dentro_de_una_hora to (current date) + 1 ∗ hours

Que devuelve la fecha y hora exacta que tendrán lugar dentro de una hora, suponiendo que antes no caiga un meteorito gigante y la aceleración o cualquier otra cosa den lugar a una paradoja en la línea espacio-temporal de nuestra franja horaria (que ya sería mala suerte…).

Al igual que el valor pi, podemos modificar el valor de estas constantes, aunque resulte bastante maquiavélico. Aunque “lógicamente” nosotros cambiemos el valor de un minuto (que es de 60 —segundos—), eso no altera el valor de la hora (que sigue siendo de 3600 —segundos—). Por ejemplo:

set minutes to 50

1 ∗ minutes — 50

1 ∗ hours — 3600

Hemos establecido el valor del minuto en 50 (hipotéticos segundos). Por eso, la expresión “1 ∗ minutes” devuelve el valor 50. Sin embargo, a pesar de haber modificado esta constante, las horas siguen manteniendo su valor, y “1 ∗ hours” devuelve 3600, y no 3000, como habíamos planeado; eso es porque cada constante tiene un valor asignado, y las constantes de fecha también, con respecto a los “segundos”, no a los minutos. Esa es la razón de que no se pueda modificar la constante seconds, que es una constante que existe (aunque AppleScript no la defina), y que siempre tiene el valor de 1. Vamos, que una hora son 3600 segundos, y no 60 minutos.

Constantes boolean

Esto no admite discusión. O es verdad o es mentira. O es true o es false.

Estas constantes se utilizan siempre al evaluar una expresión comparativa tipo “si esto es verdad, entonces nosequé”.

set x to 2 is greater than 1

if x is true then beep –> también de podría decir, abreviando, “if x then beep”

if true is not false then beep

No hay mucho más que contar de las boolean éstas.

Atributos de ignoring y considering

Ignoring y considering son dos cosas denominadas statements, y que sirven, respectivamente, para ignorar o considerar “cosas” (que son las constantes de que vamos a hablar).

application responses

Cuando yo envío un comando o apple event a una aplicación (por ejemplo: “Oyes, Finder, duplícame este documento”), AppleScript suele esperar un resultado de ese comando. Por ejemplo, el resultado de duplicar una carpeta es una referencia, que se devuelve cuando el objeto ya ha sido duplicado. Mientras tanto, AppleScript está pendiente de la respuesta. Si se tratase de un documento de 1Kb, esperaría muy poco tiempo. Pero si fuese una carpeta de 6Gb, entonces tardaría un ratito hasta recoger la respuesta.

Pues bien, yo puedo renunciar al resultado y dejar que mi script siga fluyendo libremente mientras el Finder o quien sea hace lo que le he ordenado, ya que puedo no necesitarlo para nada y lo único que hace es retrasar la ejecución del resto del script.

tell application “Finder”

 ignoring application responses

  duplicate file “sonido.aif”

  end ignoring

end tell

Suponiendo que el documento “sonido.aif” tenga un tamaño de 200Mb, puedo preferir no esperar el resultado de la duplicación de esta manera, y mi script tarda poquísimo en terminar su ejecución.

Por defecto, el estado de los application responses es considering; o sea, que AppleScript espera el resultado de los comandos.

case, diacriticals, expansion, hyphens, punctuation, white space

Éstos los pongo juntos porque están todos relacionados con el texto. Estas constantes también se pueden ignorar o tener en consideración.

case es lo que define si una letra es mayúscula o minúscula. Por defecto, AppleScript ignora por completo este atributo.

“kapullo” is “KApULLo”

Esto devuelve “true“. O sea, que es verdad, según AppleScript.

considering case

 “kapullo” is “KApULLo”

end considering

Y esto, por fin, devuelve “false“, ya que ahora hemos deseado con muchas fuerzas que AppleScript distinga entre mayúsculas y minúsculas.

El resto de constantes de texto sí que son tenidas en cuenta por AppleScript, a no ser que especifiquemos lo contrario. Veamos este ejemplillo o no lo hagamos:

set x to “kapullo”

x is “kápullo” — “diacriticals”, signos de acentuación

x is “kæpullo” — “expansion”, o “letras compuestas”

x is “ka-pullo” — “hyphens”, guiones

x is “kapullo.” — “punctuation”, signos de puntuación

x is “ka pullo” — “white space”, espacio en blanco

Todos los ejemplos devuelven “false”, como es lógico. Si encerrásemos este ejemplo bajo las cláusulas respectivas “ignoring diacriticals”, “ignoring expansion”… Entonces todos devolverían “true”.

NOTA: no confunda vd. white space con space, a secas, que veremos más adelante, porque son dos constantes distintas.

Fecha y hora

Las más generales ya las hemos visto: son minutes, hours, days y weeks, y representan su valor por el número de segundos que contienen. No “existen” los segundos, que siempre tienen valor 1 ni los meses y años, que pueden variar (no es lo mismo enero que febrero, ni un año bisiesto que otro que no lo es).

Aparte de estos, tenemos también los nombres de los días de la semana (en inglés, se siente): Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday.

Y, por supuesto, los nombres de los meses: January, February, March, April, May, June, July, August, September, October, November, December.

Para extraer de una fecha el nombre del día de la semana o del mes, podemos utilizar respectivamente las palabrejas weekday y month.

set x to current date

set el_dia to weekday of x

set el_mes to month of x

Chorradas varias.

Constantes “misceláneas”

Así se llaman en la ASLG, y quedan recogidas anything, current application, it, me, my, missing value y result. Creo que también habría que añadir its, que sería el eslabón perdido en la relación me-my/it-…

anything

Esta es una constante que se han sacado de la chistera los señores programadores de Apple AppleScript y que equivale a “cualquier cosa”, que en realidad no es “cualquier cosa”, en el sentido literal de la expresión. Por tanto, anything sólo es igual a anything, no a “chistorra” o a 12 ∗ 2.

missing value

El uso de esta constante es muy parecido al de anything, y suele “ocurrir” cuando preguntamos a alguien por algo que admite y que actualmente no posee. Un poco lío, ¿no? Pero esto es sólo a la hora de devolver resultados. Por ejemplo, supongamos que preguntamos al frutero del barrio si tiene naranjas. Más bien, le interpelamos, para que no nos venga con evasivas. Justamente se le han terminado, pero no nos importan las circunstancias. Pues nos devuelve “naranjas: missing value”.

Pero para construir nosotros algo con missing value, lo hacemos igual que con anything:

set x to missing value

Y ya está, aunque esta constante tenga una utilidad muy reducida.

current application

Esto es una referencia a la aplicación sobre la que corre el script. Si es una aplicación de script (applet o droplet), entonces el current application es la aplicación misma. Si ejecutamos el código desde un editor de scripts, entonces el current application es el editor de scripts en cuestión.

me-my, it-its

Es una referencia al “environment” sobre el que corre el script, el código que está ejecutándose. Por ejemplo:

me

Devuelve como resultado el script que se ejecuta, que es “me”, el script, que según el current application sobre el que se desarrolle, puede devolver el propio script (“me”) o una referencia al mismo (“«script»”).

La correlativa constante my es un simple posesivo de la misma cosa y se utiliza para hacer referencia a objetos propios del me.

class of me

my class

Ambas líneas de código devuelven el mismo resultado.

it-its es lo mismo, pero para objetos “externos” llamados por un “tell block”:

tell application “Finder”

 name of it

 its name

end tell

Pues eso. Lo mismo.

Es importante la distinción entre estas partículas y el current application. Para clarificar esto con un ejemplo sencillo, vamos a estudiar este código:

name of me

Si lo hacemos correr desde una aplicación de script, dará error, ya que AppleScript (que sería el current application) no admite “name” como objeto. No es una de sus classes.

Sin embargo, este otro código, también ejecutado desde una aplicación de script:

property parent: application “Finder”

name of me

No daría error, ya que el current application donde se desenvuelve el código es el Finder, que sí tiene en una de sus categorías el class “name”, y devolvería “Finder”.

result

Habitualmente, cuando ejecutamos un comando o acción del tipo que sea, es porque necesitamos el resultado de esa operación. Pues ése es el result. Así de sencillo.

Cualquier editor de scripts nos devuelve por defecto el resultado que sea cuando ejecutamos un código. Pero una aplicación de script, por ejemplo, no devuelve nada, aunque sí exista, a no ser que lo pidamos expresamente:

2 ∗ 2

4 ∗ result

El típico ejemplo de utilización de result:

set x to text returned of (display dialog “¿Cómo te llamas?” default answer “”)

display dialog “¿Cómo te llamas?” default answer “”

set x to text returned of the result

Ambas rutinas devuelven lo mismo. El resultado de un “display dialog” con “default answer” es un record con dos cosas: el “text returned” y el “button returned”. Pues podemos hacer dos cosas: encerrar directamente en la variable “x” el texto devuelto después de ejecutar el comando “display dialog” (extrayéndolo del record que esperamos), o simplemente ejecutar el diálogo y luego extraer el resultado.

Por último, dejar constancia de que el result es el result; algo que existe sólo cuando algo ha ocurrido. Por tanto, esta expresión sería incorrecta, ya que estamos requiriendo el result de algo que no ha sucedido aún:

result of (1 ∗ 1)

Opciones para “cerrar”

Esta constante es muy relativa, ya que es de todo punto “no universal”.

AppleScript define en sus tablas para documentos que el comando close (cerrar) tiene tres opciones, que se suponen constantes: saving yes/no/ask. O sea, cerrar salvando, sin salvar o preguntando qué hacer.

Las aplicaciones que siguen el modelo definido por AppleScript sí que soportan estas constantes, pero el resto no. Por ejemplo, “Tex-Edit Plus” o “AppleWorks” sí soportan estas constantes. Otras aplicaciones, como “Netscape Communicator” hacen caso omiso de estas constantes, aunque en algunos casos puedan llegar a compilarlas.

Constantes de texto

Las únicas constantes de texto son tres: espacio, tabulador y retorno (space, tab y return). No hay mucho que decir acerca de ellas. Simplemente, que existen y se pueden utilizar de manera tonta (o inteligente):

set my space to “KAPULLO”

set x to “eres un ” & space

Vea vd. mismo el resultado de esta tontería de ejemplo.

Es verdad, por qué negarlo, que se utilizan bastantes veces para descomponer textos con los text item delimiters; por ejemplo, para generar listas desde un documento delimitado por tabuladores o retornos de carro:

set el_texto to “Jaimito

Jorgito

Pepito”

set AppleScript’s text item delimiters to return

set la_lista to text items of el_texto

set AppleScript’s text item delimiters to {“”}

Aquí hemos utilizado la constante return, aunque podríamos haber utilizado la siguiente expresión, igualmente válida:

set AppleScript’s text item delimiters to

Vamos, un retorno normal y corriente.

Constantes de estilo de texto

Igual que pasaba con saving yes/no/ask, AppleScript define en su modelo para texto diversas constantes de estilo de texto, que luego las aplicaciones pueden soportar o no. Estas constantes son all caps, all lowercase, bold, condensed, expanded, hidden, italic, outline, plain, shadow, small caps, strikethrough, subscript, superscript y underline.

Suponiendo que la aplicación “x” considere estas constantes en su diccionario, entonces puede devolver el estilo de un carácter (o palabra, párrafo, etc.), haciendo constar los “on styles” (los estilos activos) y los “off styles” (los inactivos).

Algunas aplicaciones que sí contemplan estas constantes son “QuarkXPress”, “Tex-Edit Plus” y “AppleWorks”.

version

Y va la última, que es muy fácil. Es la versión de AppleScript. Por ejemplo, en mi computadora iMac-iana devuelve “1.8.2b3”, que es la versión de AppleScript que he instalado hoy mismo.

Aquí la ASLG pone un ejemplo de lo más extraño que tiene AppleScript (pág. 106), haciendo una comparación numérica entre dos string que, si viene a cuento, será debatida y explicada a medias más adelante.

null

Su existencia no consta en ningún sitio, pero existe. Su significado y uso es el mismo que el de “missing value”.

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

0 0 votos
Article Rating
Subscribe
Notify of
0 Comments
Opiniones Inline
Ver todos los comentarios
0
Me encantaría saber tu opinión, por favor, deja un comentariox
()
x