# AppleScript

AppleScript è un sistema di scripting introdotto dalla Apple Inc. e integrato nel proprio sistema operativo macOS.
Con l'avvento di Mac OS X Tiger, è possibile usare Automator per generare script disegnando un diagramma di flusso. Il manager del progetto AppleScript è Sal Soghoian.

## Storia

Il progetto AppleScript può essere considerato come una prosecuzione di HyperTalk, il linguaggio utilizzato da HyperCard per gestire la logica e l'interfaccia grafica. Il progetto AppleScript nacque dalla convinzione Apple secondo cui un simile linguaggio poteva essere usato con ogni applicazione.

## La metafora della lingua naturale

Mantenendo la tradizionale semplicità d'uso del macOS, il linguaggio AppleScript è costruito come una metafora di una lingua naturale, allo stesso modo in cui la normale interfaccia grafica desktop è costruita come metafora della scrivania. In questo modo, il concetto di gerarchia di un oggetto viene espresso mediante delle proposizioni concatenate (in lingua inglese):
che in un altro linguaggio di alto livello potrebbe essere scritto come:

## Compiti principali di AppleScript

L'uso primario di AppleScript doveva essere quello di controllare altre applicazioni; per questo scopo dipende dal protocollo di comunicazione del macOS chiamato AppleEvents. Si tratta essenzialmente di messaggi spediti tramite codici da un'applicazione a un'altra: AppleScript usa i dizionari di ogni applicazione per associare a tali codici dei termini comprensibili, permettendo quindi la comunicazione nei due sensi tra codici AppleEvents e termini AppleScript.
L'applicazione alla quale il messaggio deve essere spedito è richiamata dal comando "tell":
D'altra parte, AppleScript non ha bisogno di altre applicazioni per effettuare operazioni su dati. Per esempio, il codice seguente:
mostra una finestra di dialogo, per l'inserimento da parte dell'utente dei centimetri. La risposta viene convertita in pixel per un sistema a 72 pixel per pollice; il risultato viene mostrato tramite una seconda finestra di dialogo.

## AppleScript Studio

Con l'avvento di macOS, AppleScript è andato ben oltre le sue origini: Applescript Studio è un ambiente di sviluppo gratuito che usa AppleScript come linguaggio principale e in cui l'interfaccia grafica viene progettata tramite il framework ProjectBuilder.
Con l'uscita di Mac OS X Panther, AppleScript Studio e Project Builder sono stati inseriti nell'ambiente di sviluppo integrato Xcode. Il tutto permette di costruire l'interfaccia grafica tramite drag and drop (similmente a quanto avviene, ad esempio, con Visual Basic) e verificare immediatamente come verrà vista nell'applicazione.
Mac OS X 10.3 contiene, come tutte le precedenti versioni di macOS, anche uno editor di script che, pur mantenendo la semplicità originale, permette di costruire script anche complicati, utilizzando alcune caratteristiche di aiuto che ne permettono l'uso anche a principianti.

## Dialetti

Per un certo periodo, AppleScript supportò il linguaggio in diverse lingue (tra le quali, oltre all'inglese, ci furono francese, giapponese e italiano). Esso era in grado di compilare uno script scritto in una qualsiasi di queste lingue e di salvare in un dialetto diverso; anche se il progetto rappresentò un successo tecnico, pochi sviluppatori fornirono dizionari nelle varie lingue per le proprie applicazioni. Inoltre, il supporto e le prove di controllo qualità si rivelarono molto dispendiose rispetto al possibile guadagno: dalla versione Mac OS 8.5 si tornò ad una sola lingua supportata (l'inglese).

## Caratteristiche essenziali del linguaggio

* tipi di dati: string, integer, real, list, record, object
** in una lista possono coesistere tipi diversi
** i record sono liste di coppie "nome-valore"
* strutture di flusso standard (if…then…else, cicli repeat, while)
* le variabili sono create al momento dell'uso
* gli oggetti possono contenere sia dati che metodi
* gli oggetti ereditano dai moduli padre
* struttura tell per identificare il destinatario del messaggio
* le applicazioni possono definire i termini al runtime
* possibile la compilazione runtime con la struttura run script
* possibile la persistenza usando i comandi store/load script