Percorso: ilMac.net > Scuola di Mac > Corsi > Guida a AppleScript


Guida a AppleScript

Le subroutines (i sottoprogrammi)

Fino ad ora abbiamo analizzato script composti da un unico grande blocco di istruzioni, quello che nel C si chiama “main”, poiché le operazione svolte da essi non erano molto complicate. Ora inizieremo a lavorare anche con script che inglobano all’interno le subroutines (ovvero i sottoprogrammi).

I programmi non sono formati da un unico blocco di istruzioni eseguite in modo continuato, ma da elementi connessi in modo da raggiungere un determinato scopo, e il computer nell’eseguirli passa da un punto all’altro del listato. I sottoprogrammi svolgono determinate istruzioni (a volte anche molto semplici) e ci fanno risparmiare molto tempo (e codice!) poiché una volta scritti possono essere invocati piu’ volte.
Ad esempio nel MacOS, il movimento del cursore del mouse è gestito da un determinato sottoprogramma e sia che stiamo lavorando nel Finder, sia che stiamo lavorando con ClarisWorks, le linee di codice utilizzate per gestirlo sono sempre le stesse.

Se il concetto non risultasse ancora chiaro, è esplicato in modo molto efficace dal seguente listato.

on saluto()
display dialog "hello world!"
end saluto

saluto()

Tra on saluto() ed end saluto ci sono tutte le istruzioni del sottoprogramma saluto.
Una volta dichiarato la subroutine e specificate le istruzioni di essa, per mandarla in esecuzione occorre invocarla (ovviamente é possibile invocarla in qualsiasi punto del listato, e non subito dopo!). Infatti se invece eseguite quest’altro listato, non succedera’ nulla.

on messaggio_errore()
display dialog "errore!" with icon 0
end messaggio_errore

Cio’ avviene perché nonostante la subroutine messaggio_errore sia stata dichiarata, non è stata invocata. Per invocarla è sufficiente aggiungere al listato messaggio_errore() nel punto adatto del listato.

Ed ora vi propongo lo script Calcolatrice riscritto mediante l’uso dei sottoprogrammi.

global a, b, c
display dialog "Semplice calcolatrice" buttons {"OK", "Info"} default button 1
set scelta to button returned of result

if scelta = "Info" then
info()
end if

on info()
display dialog "Tutorial AppleScript per ilMac 1999 Alessandro Palmisano" buttons {"OK"}
end info

display dialog "Primo numero " default answer ""
set a to text returned of result
display dialog "Operatore" default answer ""
set oper to text returned of result
display dialog "Secondo numero " default answer ""
set b to text returned of result

if oper = "+" then
addizione()
end if

if oper = "*" then
moltiplicazione()
end if

if oper = "-" then
sottrazione()
end if

if oper = "/" then
divisione()
end if

on errore()
beep
display dialog "Error" with icon 0

end errore

on addizione()
try
a + b
display dialog "Il risultato è " & result
on error
errore()
end try
end addizione

on moltiplicazione()
try
a * b
display dialog "Il risultato è " & result
on error
errore()
end try
end moltiplicazione

on sottrazione()
try
a - b
display dialog "Il risultato è " & result
on error
errore()
end try
end sottrazione

on divisione()
try
a / b
display dialog "Il risultato è " & result
on error
errore()
end try
end divisione

Analizzandolo troviamo subito una nuova istruzione: global. Questa istruzione è stata aggiunta poiché le variabili a,b e c (rispettivamente il primo numero, il secondo e il risultato), sono utilizzate non solo nel listato principale, ma anche nei sottoprogrammi. Global quindi è una proprietà delle variabili che le rende accessibili in qualsiasi punto del listato, indipendentemente dal sottoprogramma.

Possiamo notare subito anche un risparmio di codice, ad esempio le istruzioni che mostrano il messaggio di errore (nel caso in cui si verifichi), al contrario del precedente listato, non sono ripetute per ognuna delle quattro operazioni. Una una volta dichiarate, sono riutilizzate piu’ volte semplicemente invocandole con la subroutine errore().
All’inizio del programma possiamo anche scegliere se utilizzarlo od avere le informazioni su di esso. Invece di utilizzare il solito costrutto if-else, è stata utilizzata anche qui una subroutine, che nel caso in cui venga premuto il pulsante “Info”, verrà eseguita. La stessa cosa vale per le quattro operazioni, ho scritto una subroutine per ognuna di esse.
Altra cosa da segnalare è che una subroutine è dichiarabile in qualsiasi punto del programma. Infatti, dal punto di vista dell’ordine, non è necessario prima scriverla e poi invocarla, ma è anche possibile il contrario (come avviene in questo caso).



Data di pubblicazione: 02-04-2000
L'intero contenuto di questo sito dal 1998 del Team di ilMac.net, vietata ogni riproduzione senza il consenso scritto da parte degli autori.