Paradigma | Programación en lenguaje natural , Scripting |
---|---|
Revelador | Compañía Apple Inc. |
Apareció por primera vez | 1993 ( 1993 ) | [1]
Versión estable | 2.8 [2] / 16 de octubre de 2014 ( 16 de octubre de 2014 ) [3] |
Disciplina de mecanografía | Débil , dinámico |
Sistema operativo | Sistema 7 , Mac OS 8 , Mac OS 9 , macOS |
Licencia | Propietario (partes disponibles bajo APSL ) |
Extensiones de nombre de archivo | .scpt, .scptd, .applescript |
Sitio web | desarrollador.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide |
Influenciado por | |
Lenguaje natural , HyperTalk |
AppleScript es un lenguaje de programación creado por Apple Inc. que facilita el control automatizado de aplicaciones Mac que admiten scripts . Introducido por primera vez en System 7 , actualmente se incluye en todas las versiones de macOS como parte de un paquete de herramientas de automatización del sistema. [4] [5] El término "AppleScript" puede referirse al lenguaje en sí, a un script individual escrito en el lenguaje o, de manera informal, a la arquitectura de scripting abierto de macOS que subyace al lenguaje. [4] [5]
AppleScript es principalmente un lenguaje de programación desarrollado por Apple para realizar comunicaciones entre aplicaciones (IAC) mediante eventos de Apple . [4] [5] AppleScript está relacionado con los eventos de Apple, pero es diferente de ellos. Los eventos de Apple están diseñados para intercambiar datos y controlar otras aplicaciones con el fin de automatizar tareas repetitivas.
AppleScript tiene algunas capacidades de procesamiento propias, además de enviar y recibir eventos de Apple a las aplicaciones. AppleScript puede realizar cálculos básicos y procesamiento de texto, y es extensible, lo que permite el uso de complementos de scripts que agregan nuevas funciones al lenguaje. Sin embargo, AppleScript se basa principalmente en la funcionalidad de las aplicaciones y los procesos para manejar tareas complejas. Como lenguaje de comandos estructurado , AppleScript se puede comparar con los shells de Unix , Microsoft Windows Script Host o IBM REXX , pero es distinto de los tres. Esencial para su funcionalidad es el hecho de que las aplicaciones de Macintosh publican "diccionarios" de objetos y operaciones direccionables.
AppleScript tiene algunos elementos de programación procedimental , programación orientada a objetos (particularmente en la construcción de objetos de script) y tendencias de programación de lenguaje natural en su sintaxis, pero no se ajusta estrictamente a ninguno de estos paradigmas de programación . [5] : xxvi
A finales de la década de 1980, Apple consideró utilizar el lenguaje de programación HyperTalk de HyperCard como lenguaje estándar para el desarrollo de usuarios finales en toda la empresa y dentro de su sistema operativo Mac OS clásico , y para la comunicación entre procesos entre productos Apple y no Apple. [6] HyperTalk podría ser utilizado por novatos para programar una pila HyperCard. Los ingenieros de Apple reconocieron que se podía diseñar un lenguaje de programación similar, pero más orientado a objetos, para ser utilizado con cualquier aplicación , y el proyecto AppleScript nació como un derivado de un esfuerzo de investigación para modernizar el Macintosh en su conjunto y finalmente se convirtió en parte de System 7. [ 1]
AppleScript se lanzó en octubre de 1993 como parte de System 7.1.1 (System 7 Pro, la primera actualización importante de System 7). [1] QuarkXPress (versión 3.2) fue una de las primeras aplicaciones de software importantes que admitieron AppleScript. Esto, a su vez, condujo a que AppleScript se adoptara ampliamente en el mundo editorial y de preimpresión, a menudo uniendo flujos de trabajo complejos. Este fue un factor clave para mantener la posición dominante de Macintosh en la publicación y preimpresión, incluso después de que QuarkXpress y otras aplicaciones de publicación se trasladaran a Microsoft Windows.
Después de cierta incertidumbre sobre el futuro de AppleScript en el sistema operativo de próxima generación de Apple, el paso a Mac OS X (alrededor de 2002) y sus marcos de trabajo Cocoa aumentaron enormemente la utilidad y flexibilidad de AppleScript. Las aplicaciones Cocoa permiten a los desarrolladores de aplicaciones implementar la capacidad de creación de scripts básicos para sus aplicaciones con un mínimo esfuerzo, ampliando el número de aplicaciones que se pueden crear directamente con scripts. Al mismo tiempo, el cambio a los fundamentos de Unix y la capacidad de AppleScript de ejecutar comandos de Unix directamente, con el do shell script
comando, [7] permitió a AppleScript un control mucho mayor sobre el sistema operativo en sí. [5] : 863 AppleScript Studio, lanzado con Mac OS X 10.2 como parte de Xcode , y más tarde el marco de trabajo AppleScriptObjC, lanzado en Mac OS X 10.6 , permitieron a los usuarios crear aplicaciones Cocoa utilizando AppleScript. [5] : 969
En un artículo de 2006, Macworld incluyó a AppleScript entre su clasificación de los 30 productos más importantes de Apple hasta la fecha, ubicándolo en el puesto número 17. [8]
En un artículo de 2013 para Macworld , el veterano desarrollador de software para Mac y comentarista John Gruber concluyó su reflexión sobre "la improbable persistencia de AppleScript" señalando: "En teoría, AppleScript podría ser mucho mejor; en la práctica, sin embargo, es lo mejor que tenemos que funciona. Ejemplifica las ventajas de Mac sobre iOS para los aficionados y los usuarios avanzados". [9]
En octubre de 2016, el veterano gerente de productos de AppleScript y evangelista de la automatización Sal Soghoian dejó Apple cuando su puesto fue eliminado "por razones comerciales". [10] Los veteranos de la comunidad Mac como John Gruber y Andy Ihnatko generalmente respondieron con preocupación, cuestionando el compromiso de Apple con la comunidad de desarrolladores y los usuarios profesionales. [11] El vicepresidente senior de ingeniería de software de Apple, Craig Federighi, respondió en un correo electrónico diciendo que "¡Tenemos toda la intención de continuar nuestro apoyo a las grandes tecnologías de automatización en macOS!", aunque Jeff Gamet en The Mac Observer opinó que hizo poco para calmar su duda sobre el futuro de la automatización de Apple en general y AppleScript en particular. [12] Por el momento, AppleScript sigue siendo un componente de las tecnologías de automatización de macOS, junto con Automator , Shortcuts , Services y shell scripting .
AppleScript fue diseñado para ser utilizado como un lenguaje de scripts accesible para el usuario final, ofreciendo a los usuarios un mecanismo inteligente para controlar aplicaciones y acceder y modificar datos y documentos. AppleScript utiliza eventos de Apple , un conjunto de formatos de datos estandarizados que el sistema operativo Macintosh utiliza para enviar información a las aplicaciones, de forma análoga al envío de consultas XPath a través de XML-RPC en el mundo de los servicios web . [5] : xxvi Los eventos de Apple permiten que un script funcione con múltiples aplicaciones simultáneamente, pasando datos entre ellas para que se puedan realizar tareas complejas sin interacción humana. [4] Por ejemplo, un AppleScript para crear una galería web simple podría hacer lo siguiente:
Para el usuario, cientos o miles de pasos en múltiples aplicaciones se han reducido al único acto de ejecutar el script, y la tarea se realiza en mucho menos tiempo y sin posibilidad de error humano aleatorio. Un script grande y complejo podría desarrollarse para ejecutarse solo una vez, mientras que otros scripts se utilizan una y otra vez.
Los elementos de una aplicación que se pueden programar son visibles en el Diccionario de programación de la aplicación (distribuido como parte de la aplicación), que se puede ver en cualquier editor de scripts. Los elementos se agrupan generalmente en suites, según las relaciones funcionales que existen entre ellos. Hay dos tipos básicos de elementos presentes en cualquier suite: clases y comandos.
Todas las aplicaciones que admiten scripts comparten algunos comandos y objetos básicos, generalmente denominados Suite estándar (comandos para abrir, cerrar o guardar un archivo, imprimir algo, salir, asignar datos a variables), así como un objeto de aplicación básico que proporciona las propiedades de la aplicación que admiten scripts. Muchas aplicaciones tienen numerosas suites capaces de realizar cualquier tarea que la propia aplicación pueda realizar. En casos excepcionales, las aplicaciones pueden admitir complementos que incluyan sus propios diccionarios de scripts.
AppleScript fue diseñado con la capacidad de crear scripts de manera intuitiva mediante el registro de las acciones del usuario. Esta capacidad de grabación de AppleScript debe estar incorporada en la aplicación: la aplicación debe admitir eventos de Apple y la grabación de AppleScript; [13] como Finder admite la grabación de AppleScript, puede ser útil como referencia. Cuando se abre el Editor de AppleScript (Script Editor) y se hace clic en el botón Grabar, las acciones del usuario para las aplicaciones grabables se convierten en sus comandos AppleScript equivalentes y se envían a la ventana del Editor de scripts. El script resultante se puede guardar y volver a ejecutar para duplicar las acciones originales, o modificar para que sea más útil en general.
Los comentarios se pueden realizar de varias formas. Un comentario de una sola línea puede comenzar con dos guiones ( -- ). En AppleScript 2.0, lanzado por primera vez en Mac OS X Leopard , también puede comenzar con un signo de número (#). Esto permite que un script de AppleScript autónomo se almacene como un archivo de texto ejecutable que comience con la línea shebang. #!/usr/bin/osascript
Ejemplo:
--Este es un comentario de una sola línea # ¡Así es esto! (en Mac OS X Leopard o posterior)
Para los comentarios que ocupan varias líneas, AppleScript utiliza paréntesis con asteriscos en su interior. Ejemplo:
(*Este es un comentario de varias líneas *)
En AppleScript, el tradicional programa "¡Hola, mundo!" se puede escribir de muchas formas diferentes, entre ellas:
Mostrar el cuadro de diálogo "¡Hola, mundo!" : una ventana modal con los botones "Aceptar" y "Cancelar" ; o mostrar la alerta "¡Hola, mundo!" : una ventana modal con un solo botón "Aceptar" y un icono que representa la aplicación que muestra la alerta ; o decir "¡Hola, mundo!" : un mensaje de audio que utiliza una voz de computadora sintetizada
AppleScript tiene varias opciones de interfaz de usuario, incluidos cuadros de diálogo, alertas y listas de opciones. (El carácter ¬, que se genera al escribir ⌥ Option+ returnen el Editor de scripts, indica la continuación de una sola instrucción en varias líneas).
-- Conjunto de diálogo dialogReply para mostrar el diálogo "Texto del diálogo" ¬ respuesta predeterminada "Respuesta de texto" ¬ respuesta oculta falso ¬ botones { "Omitir" , "Aceptar" , "Cancelar" } ¬ botón predeterminado "Aceptar" ¬ botón de cancelación "Omitir" ¬ con título "Título de la ventana del diálogo" ¬ con nota de icono ¬ renunciar después de 15
-- Elegir de la lista establecer chosenListItem para elegir de la lista { "A" , "B" , "3" } ¬ con título "Título de la lista" ¬ con mensaje "Texto del mensaje" ¬ elementos predeterminados "B" ¬ nombre del botón Aceptar "¡Se ve bien!" ¬ nombre del botón Cancelar "No, inténtalo de nuevo" ¬ se permiten selecciones múltiples falso ¬ se permite selección vacía
-- Conjunto de alerta resultAlertReply para mostrar la alerta "Texto de alerta" ¬ como advertencia ¬ botones { "Omitir" , "Aceptar" , "Cancelar" } ¬ botón predeterminado 2 ¬ botón cancelar 1 ¬ renunciar después de 2
Cada método de interacción del usuario puede devolver los valores de los botones en los que se hizo clic, los elementos elegidos o el texto introducido para su posterior procesamiento. Por ejemplo:
Mostrar alerta "¡Hola, mundo!" Botones { "Rechazar groseramente" , "Aceptar felizmente" } Establecer la respuesta en el botón devuelto del resultado si la respuesta es "Aceptar felizmente" entonces pitido 5 de lo contrario decir "¡Tonterías! " Fin si
Mientras que los eventos de Apple son una forma de enviar mensajes a las aplicaciones, AppleScript es un lenguaje particular diseñado para enviar eventos de Apple. En consonancia con el objetivo de facilitar su uso a los principiantes, el lenguaje AppleScript está diseñado sobre la metáfora del lenguaje natural , al igual que la interfaz gráfica de usuario está diseñada sobre la metáfora del escritorio . Un AppleScript bien escrito debe ser lo suficientemente claro para que cualquiera pueda leerlo y entenderlo, y editarlo fácilmente. El lenguaje se basa en gran medida en el lenguaje HyperTalk de HyperCard, ampliado para referirse no solo al mundo de tarjetas y pilas de HyperCard, sino también, teóricamente, a cualquier documento. Con este fin, el equipo de AppleScript presentó el Modelo de objetos de eventos de Apple (AEOM), que especifica los objetos que cualquier aplicación en particular "conoce".
El núcleo del lenguaje AppleScript es el uso de términos que actúan como sustantivos y verbos que se pueden combinar. Por ejemplo, en lugar de un verbo diferente para imprimir una página, un documento o un rango de páginas (como printPage, printDocument, printRange), AppleScript utiliza un único verbo "print" que se puede combinar con un objeto, como una página, un documento o un rango de páginas.
imprimir página 1imprimir documento 2Imprimir páginas 1 a 5 del documento 2
En general, AEOM define una serie de objetos (como "documento" o "párrafo") y las acciones correspondientes (como "cortar" y "cerrar"). El sistema también define formas de hacer referencia a las propiedades de los objetos, por lo que se puede hacer referencia al "tercer párrafo del documento 'Buen día'" o al "color de la última palabra de la ventana principal". AEOM utiliza un diccionario de aplicaciones para asociar los eventos de Apple con términos legibles para humanos, lo que permite la traducción entre AppleScript legible para humanos y eventos de Apple en bytecode . Para descubrir qué elementos de un programa son programables, se pueden ver los diccionarios de las aplicaciones compatibles. (En las aplicaciones Xcode y Script Editor , esto se encuentra en Archivo → Abrir diccionario ).
Para designar qué aplicación debe ser el objetivo de dicho mensaje, AppleScript utiliza una construcción "tell":
Dile a la aplicación "Microsoft Word" que salga y termine .
Alternativamente, el tell puede expresarse en una línea usando un infinitivo :
Dile a la aplicación "Microsoft Word" que salga
Para los eventos del "Core Suite" (activar, abrir, reabrir, cerrar, imprimir y salir), la aplicación puede proporcionarse como objeto directo a los comandos transitivos:
Salir de la aplicación "Microsoft Word"
El concepto de jerarquía de objetos se puede expresar utilizando bloques anidados:
Dile a la aplicación "QuarkXPress" Dile al documento 1 Dile a la página 2 Dile al cuadro de texto 1 Establece Word 5 en "Apple" Fin de la instrucción Fin de la instrucción Fin de la instrucción Fin de la instrucción
El concepto de jerarquía de objetos también se puede expresar utilizando frases preposicionales anidadas o una serie de posesivos:
píxel 7 de la fila 3 de la imagen TIFF "mi mapa de bits" píxel 7 de la fila 3 de la imagen TIFF "mi mapa de bits"
que en otro lenguaje de programación podría expresarse como llamadas a métodos secuenciales , como en este pseudocódigo :
getTIFF ( "mi mapa de bits" ). getRow ( 3 ) .getPixel ( 7 );
AppleScript incluye sintaxis para contar en orden ordinal, "el primer párrafo", así como en orden cardinal, "párrafo uno". Asimismo, los números en sí pueden ser mencionados como texto o numéricamente, "cinco", "quinto" y "5" son todos compatibles; son sinónimos en AppleScript. Además, la palabra "el" puede usarse legalmente en cualquier parte del script para mejorar la legibilidad: no tiene ningún efecto sobre la funcionalidad del script.
Una calculadora a prueba de fallos:
Dile a la aplicación "Finder" -- Establecer variables Establecer el1 al texto devuelto de ( mostrar diálogo "1.º" respuesta predeterminada "Número aquí" botones { "Continuar" } botón predeterminado 1 ) Establecer el2 al texto devuelto de ( mostrar diálogo "2.º" respuesta predeterminada " Número aquí" botones { "Continuar" } botón predeterminado 1 ) Intentar Establecer el1 al1 como entero Establecer el2 al2 como entero en caso de error Mostrar diálogo "Solo puede ingresar números en una calculadora" con título "ERROR" botones { "Aceptar" } botón predeterminado 1 Regresar Fin Intentar -- ¿Agregar? si el botón devuelto de ( mostrar diálogo "¿Agregar?" botones { "No" , "Sí" } botón predeterminado 2 ) es "Sí" , entonces establezca ans en ( the1 + the2 ) mostrar diálogo ans con título "Responder" botones { "Aceptar" } botón predeterminado 1 diga ans -- ¿Restar? de lo contrario si el botón devuelto de ( mostrar diálogo "¿Restar?" botones { "No" , "Sí" } botón predeterminado 2 ) es "Sí" , entonces establezca ans en ( the1 - the2 ) mostrar diálogo ans con título "Responder" botones { "Aceptar" } botón predeterminado 1 diga ans -- ¿Multiplicar? de lo contrario si el botón devuelto de ( mostrar diálogo "¿Multiplicar?" botones { "No" , "Sí" } botón predeterminado 2 ) es "Sí", entonces establezca ans en ( the1 * the2 ) mostrar diálogo ans con título "Responder" botones { "Aceptar" } botón predeterminado 1 diga ans -- ¿Dividir? de lo contrario, si el botón regresó de ( mostrar el cuadro de diálogo "¿Dividir?" botones { "No" ,"Sí" } botón predeterminado 2 ) es "Sí" entonces configure ans para ( el 1 / el 2 ) mostrar el cuadro de diálogo ans con el título "Responder" botones { "Aceptar" } botón predeterminado 1 say ans else delay 1 say "No has seleccionado ninguna función. La operación se ha cancelado". end ifFin de decir
Una secuencia de cuadro de diálogo de nombre de usuario y contraseña sencilla . Aquí, el nombre de usuario es John y la contraseña es app123:
Dile a la aplicación "Finder" que establezca passAns en "app123" que establezca userAns en "John" si el texto devuelto de ( mostrar diálogo "Nombre de usuario" respuesta predeterminada "" ) es userAns entonces muestra el diálogo "Correcto" botones { "Continuar" } botón predeterminado 1 si el texto devuelto de ( mostrar diálogo "Nombre de usuario: John" y regresar y "Contraseña" respuesta predeterminada "" botones { "Continuar" } botón predeterminado 1 con respuesta oculta ) es passAns entonces muestra el diálogo "Acceso concedido" botones { "Aceptar" } botón predeterminado 1 de lo contrario muestra el diálogo "Contraseña incorrecta" botones { "Aceptar" } botón predeterminado 1 fin si de lo contrario muestra el diálogo "Nombre de usuario incorrecto" botones { "Aceptar" } botón predeterminado 1 fin si fin decir
Los editores de scripts proporcionan un entorno de programación unificado para AppleScripts, incluidas herramientas para componer, validar, compilar, ejecutar y depurar scripts. También proporcionan mecanismos para abrir y ver diccionarios de AppleScript desde aplicaciones que admiten scripts, guardar scripts en varios formatos (archivos de scripts compilados, paquetes de aplicaciones, paquetes de scripts y archivos de texto sin formato) y, por lo general, proporcionan funciones como resaltado de sintaxis y fragmentos de código preescritos.
Los AppleScripts se pueden ejecutar desde un editor de scripts, pero normalmente es más cómodo ejecutar los scripts directamente, sin abrir una aplicación de edición de scripts. Hay varias opciones para hacerlo:
Módulos reutilizables de AppleScript (disponibles desde OS X Mavericks ), escritos en AppleScript o AppleScriptObjC y guardados como archivos de script o paquetes en determinadas ubicaciones, [28] que pueden ser llamados desde otros scripts. Cuando se guarda como un paquete, una biblioteca puede incluir un archivo de diccionario de AppleScript (sdef), [29] funcionando así como un complemento de script pero escrito en AppleScript o AppleScriptObjC.
Un marco para adjuntar interfaces Cocoa a aplicaciones AppleScript, parte del paquete Xcode en Mac OS X 10.4 y 10.5, ahora obsoleto en favor de AppleScriptObjC. [30] : 438
Un marco de desarrollo de software de Cocoa , también llamado AppleScript/Objective-C o ASOC, [31] parte del paquete Xcode desde Mac OS X Snow Leopard . [32] AppleScriptObjC permite que los AppleScripts utilicen clases y métodos de Cocoa directamente. [33] La siguiente tabla muestra la disponibilidad de AppleScriptObjC en varias versiones de macOS: [34]
En Xcode | En applets | En AppleScriptLibraries | En el editor de scripts | |
---|---|---|---|---|
10.6 | ||||
10.7 | ||||
10.8 | ||||
10.9 | ||||
10.10 |
AppleScriptObjC se puede utilizar en todas las versiones posteriores de Mac OS X.
Un entorno de edición modular y gráfico en el que los flujos de trabajo se construyen a partir de acciones . Su objetivo es duplicar muchas de las funciones de AppleScript sin necesidad de conocimientos de programación. Automator tiene una acción diseñada específicamente para contener y ejecutar AppleScripts, para tareas que son demasiado complejas para el marco simplificado de Automator. [35]
Estas aplicaciones que solo se ejecutan en segundo plano y que vienen incluidas con macOS se utilizan para permitir que AppleScript acceda a funciones que normalmente no serían programables mediante scripts. A partir de Mac OS X 10.6.3, incluyen las aplicaciones programables para:
Plugins para AppleScript desarrollados por Apple o terceros. [36] Están diseñados para ampliar el conjunto de comandos integrado, expandiendo las características de AppleScript y haciéndolo algo menos dependiente de la funcionalidad proporcionada por las aplicaciones. macOS incluye una colección de adiciones de scripts denominadas Adiciones estándar ( StandardAdditions.osax ) que agrega un conjunto de comandos y clases que no son parte de las características principales de AppleScript, incluidos los diálogos de interacción del usuario, la lectura y escritura de archivos, los comandos del sistema de archivos, las funciones de fecha y las operaciones de texto y matemáticas; sin este OSAX, AppleScript no tendría la capacidad de realizar muchas acciones básicas que no proporciona directamente una aplicación.
Si bien las aplicaciones pueden definir clases especializadas (o tipos de datos), AppleScript también tiene una serie de clases integradas. Estas clases de datos básicas son compatibles directamente con el lenguaje y tienden a ser reconocidas universalmente por las aplicaciones que admiten scripts. Las más comunes son las siguientes:
tell application "Finder" …
).contents
propiedad.pi
, tab
y linefeed
.constant
.integer
real
text
clase era distinta de string
y Unicode text
, y las tres se comportaban de forma algo diferente; en 2.0 (10.5) y posteriores, todas son sinónimos y todo el texto se maneja como si estuviera codificado en UTF-16 (“ Unicode ”). [37]square yards
y luego convertir a square feet
mediante la conversión entre tipos de unidad (usando el as
operador).Muchos procesos de AppleScript se gestionan mediante bloques de código, donde cada bloque comienza con una instrucción command y termina con una instrucción end command . Las estructuras más importantes se describen a continuación.
AppleScript ofrece dos tipos de condicionales.
-- Condicional simple si x < 1000 entonces establece x en x + 1-- Condicional compuesto si x es mayor que 3 entonces -- comandos else -- otros comandos terminan si
El bucle de repetición de AppleScript se presenta en varios formatos ligeramente diferentes. Todos ejecutan el bloque entre las líneas repeat y end repeat varias veces. El bucle se puede detener de forma prematura con el comando exit repeat .
Repetir para siempre.
repetir -- comandos a repetir fin de repetición
Repetir un número determinado de veces.
repetir 10 veces - comandos a repetir fin de repetición
Bucles condicionales. El bloque dentro del bucle de repetición while se ejecuta siempre que la condición se evalúe como verdadera. La condición se vuelve a evaluar después de cada ejecución del bloque. El bucle de repetición hasta es idéntico en todo lo demás, pero el bloque se ejecuta siempre que la condición se evalúe como falsa.
establecer x en 5 repetir mientras x > 0 establecer x en x - 1 fin repetirEstablezca x en 5, repita hasta que x ≤ 0, establezca x en x - 1, fin de repetición
Bucle con una variable. Al iniciar el bucle, la variable se asigna al valor inicial. Después de cada ejecución del bloque, el valor de paso opcional se agrega a la variable. El valor de paso predeterminado es 1.
-- repite el bloque 2000 veces, i obtiene todos los valores de 1 a 2000 repite con i de 1 a 2000 -- comandos a repetir fin repetición-- repite el bloque 4 veces, i obtiene los valores 100, 75, 50 y 25 repite con i de 100 a 25 por - 25 -- comandos a repetir fin repetición
Enumerar una lista. En cada iteración, establecer la variable de bucle en un nuevo elemento de la lista dada.
establecer el total en 0 repetir con loopVariable en { 1 , 2 , 3 , 4 , 5 } establecer el total en total + loopVariable fin de repetición
Orientación de aplicaciones | Manejo de errores |
---|---|
-- Formulario simple para indicarle a la aplicación "Safari" que se active-- Aplicación compuesta de decirle "MyApp" -- comandos para que la aplicación termine de decirle | try - comandos que se probarán en caso de error - comandos de error fin try |
Una variación importante de esta estructura de bloques se presenta en forma de bloques on — end ... que se utilizan para definir controladores (subrutinas similares a funciones). Los controladores comienzan con on functionName() y terminan con end functionName , y no se ejecutan como parte del flujo normal del script a menos que se los llame desde algún lugar del script.
Manejador de funciones | Bloque de acciones de carpeta | Controlador de ejecución |
---|---|---|
en myFunction ( parámetros ...) -- los comandos de subrutina terminan myFunction | al agregar elementos de carpeta a esta Carpeta después de recibir estos Elementos - comandos para aplicar a la carpeta o elementos terminar agregando elementos de carpeta a | al ejecutarse -- los comandos terminan la ejecución |
Los controladores también se pueden definir usando "to" en lugar de "on" y se pueden escribir para aceptar parámetros etiquetados, no entre paréntesis.
Manejador con parámetros etiquetados | Controlador que utiliza "to" y parámetros etiquetados |
---|---|
en rock around the clock display dialog ( clock as string ) fin rock -- llamado con: rock around the current date | para comprobar suNúmero de abajo a arriba si inferior ≤ suNúmero y suNúmero ≤ superior entonces mostrar el cuadro de diálogo " ¡ Felicitaciones! Obtuvo un puntaje". fin si fin de verificación --llamado con: comprobar 8 del 7 al 10 |
Hay cuatro tipos de controladores predefinidos en AppleScript: ejecutar, abrir, inactivo y salir, cada uno de los cuales se crea de la misma manera que el controlador de ejecución que se muestra arriba.
al abrir los elementos repetir con este elemento en los elementos decirle a la aplicación "Finder" que actualice este elemento finalizar repetir finalizar apertura
Cuando un script que contiene un "controlador de apertura" se guarda como un subprograma, este se convierte en un droplet. Un droplet se puede identificar en el Finder por su icono, que incluye una flecha que indica que se pueden soltar elementos sobre el icono. El controlador de apertura del droplet se ejecuta cuando se sueltan archivos o carpetas sobre el icono del droplet. Las referencias a los elementos soltados sobre el icono del droplet se pasan al script del droplet como parámetro del controlador de apertura. Un droplet también se puede iniciar de la misma forma que un subprograma normal, ejecutando su controlador de ejecución.
en inactivo : código a ejecutar cuando se haya completado la ejecución del script return 60 : número de segundos de pausa antes de ejecutar nuevamente el controlador inactivo end idle
Un controlador inactivo se puede utilizar en applets o droplets guardados como applets abiertos y es útil para scripts que buscan datos o eventos específicos. La duración del tiempo inactivo es de 30 segundos de manera predeterminada, [39] pero se puede cambiar incluyendo una declaración 'return x' al final de la subrutina, donde x es la cantidad de segundos que el sistema debe esperar antes de ejecutar el controlador nuevamente.
on quit --comandos a ejecutar antes de que el script salga continue quit -- requerido para que el script salga realmente end quit
Los objetos de script se pueden definir explícitamente utilizando la sintaxis:
script scriptName -- comandos y controladores específicos del script final del script
Los objetos de script pueden utilizar las mismas estructuras "tell" que se utilizan para los objetos de aplicación, y se pueden cargar desde archivos y guardar en ellos. El tiempo de ejecución en tiempo de ejecución se puede reducir en algunos casos mediante el uso de objetos de script.
establece variable1 en 1 - crea una variable entera llamada variable1 establece variable2 en "Hola" - crea una variable de texto llamada variable2 copia { 17 , "doubleday" } en variable3 - crea una variable de lista llamada variable3 establece { variable4 , variable5 } en variable3 - copia los elementos de lista de variable3 en variables separadas variable4 y variable5 establece variable6 en script myScript - establece una variable en una instancia de un script
Dile a la aplicación "Finder" que establezca x en mi myHandler () -- o que establezca x en mi myHandler () de mi parte .en myHandler () --comandos finalizan myHandler
Usar la misma técnica para crear comandos adicionales puede reducir errores y mejorar el rendimiento.
Dígale a la aplicación "Finder" que establezca cualquierNúmero en mi ( número aleatorio entre 5 y 50 ) fin de decir
Un aspecto importante de la implementación de AppleScript es la Arquitectura de Scripting Abierta ( OSA ). [40] Apple proporciona OSA para otros lenguajes de scripting y productos de scripting/automatización de terceros como QuicKeys y UserLand Frontier, para funcionar en igualdad de condiciones con AppleScript. AppleScript se implementó como un componente de scripting , y las especificaciones básicas para interconectar dichos componentes con la OSA eran públicas, lo que permitía a otros desarrolladores añadir sus propios componentes de scripting al sistema. Las API de cliente públicas para cargar, guardar y compilar scripts funcionarían de la misma forma para todos esos componentes, lo que también significaba que los applets y droplets podían contener scripts en cualquiera de esos lenguajes de scripting.
Una característica de OSA son los complementos de scripting, o OSAX para Open Scripting Architecture eXtension , [36] que se inspiraron en los comandos externos de HyperCard . Los complementos de scripting son bibliotecas que permiten a los programadores extender la función de AppleScript. Los comandos incluidos como complementos de scripting están disponibles en todo el sistema y no dependen de una aplicación (consulte también § Bibliotecas de AppleScript). El editor de AppleScript también puede editar y ejecutar directamente algunos de los lenguajes de OSA.
Esta sección necesita una ampliación con una comparación entre scripts de JXA y AppleScript. Puedes ayudar agregándole algo más. ( Mayo de 2017 ) |
En OS X Yosemite y versiones posteriores de macOS, el componente JavaScript for Automation ( JXA ) sigue siendo la única alternativa seria del lenguaje OSA a AppleScript, [14] aunque las versiones Macintosh de Perl , Python , Ruby y Tcl admiten medios nativos para trabajar con eventos de Apple sin ser componentes OSA. [30] : 516
JXA también proporciona una interfaz de lenguaje extranjero Objective-C (y lenguaje C). [14] Al ser un entorno basado en el motor JavaScriptCore de WebKit, el conjunto de características de JavaScript está sincronizado con el motor del navegador Safari del sistema. JXA proporciona un sistema de módulos JavaScript y también es posible utilizar módulos CommonJS a través de browserify. [41]
El lenguaje de programación AppleScript destaca por su capacidad de llamar a múltiples aplicaciones, pero no fue diseñado para realizar funciones específicas de una tarea por sí mismo. Por lo tanto, por ejemplo, no se puede utilizar AppleScript para realizar de manera eficiente operaciones matemáticas intensivas o procesamiento de texto extenso. Sin embargo, se puede utilizar AppleScript en combinación con scripts de shell, scripts de Perl y otros lenguajes de programación. Esto le permite trabajar con el lenguaje más eficiente para la tarea en cuestión.