Dopo aver offerto una rapida panoramica sui componenti di MIT App Inventor, a partire da questa lezione ci occuperemo del funzionamento del pannello Blocks ovvero come gestire i cosidetti behaviors. In pratica ci occuperemo di programmazione visuale, cioè di come creare un programma utilizzando i blocchi colorati di MIT App Inventor.
Eventi
In una precedente lezione, anticipando un po’ i tempi, abbiamo già visto come creare una prima app ed abbiamo già visto come gestire un evento (la pressione di un bottone) e come associare ad esso una determinata azione (una riproduzione vocale).
Quello che abbiamo visto, in pratica, è un esempio di Event Handlers. La sintassi di questo tipo di blocco si esaurisce nella parole when … do che, tradotte in italiano, significano: "quando succede X fai Y".
E’ bene precisare che ogni componente di MIT App Inventor ha una propria serie di eventi: questi ultimi, pertanto, cambieranno a seconda che il componente coinvolto sia, ad esempio, un Bottone o una TextBox.
Metodi e Proprietà
Abbiamo detto che ogni componente ha una propria serie di eventi associati, allo stesso modo possiamo dire di metodi e proprietà. Senza voler entrare nel dettaglio della programmazione ad oggetti, in questa sede basti sapere che col termine "metodo" s’intende solitamente un’azione che può essere compiuta da un dato componente, mentre col termine "proprietà" s’intende una sua caratteristica che può essere manipolata.
Chiamare un metodo
Per meglio comprendere il funzionamento dei metodi vediamo un altro esempio:
Nell’esempio qui sopra quando viene premuto un dato bottone (Button1) l’app riproduce un dato suono (Sound1) ed attiva la vibrazione per mezzo secondo.
Possiamo notare dal nostro esempio che ogni azione da eseguire è attivata dal blocco call e che di questi blocchi è possibile inserirne più di uno. Volendo usare un linguaggio maggiormente tecnico (e sicuramente più appropriato) possiamo dire di aver usato call per chiamare due metodi del componente Sound (rispettivamente Play e Vibrate).
Osserando il nostro esempio, ancora, possiamo notare che alcuni metodi, per essere eseguiti, necessitano di un parametro (è il caso della vibrazione che necessita dell’inidicazione esplicita della durata) mentre altri (come Play) no.
Nota: quando all’interno di un medesimo evento vengono racchiuse più azioni queste vengono eseguite in ordine dall’alto verso il basso. Nel nostro esempio, quindi, prima il telefono suonerà e poi vibrerà. Ovviamente potete cambiare l’ordine a vostro piacimento attraverso una semplice operazione di drag & drop.
Lavorare con le proprietà: i blocchi setter e getter
Oltre a call, lo spazio do del blocco when … do, può contenere anche un blocco di tipo set (cosidetti blocchi setter) attraverso il quale si assegna un valore ad una proprietà di un dato componente. In questo caso l’utilizzo di parametri è obbligatorio.
Come detto le proprietà corrispondono a delle caratteristiche dell’elemento, vediamo quindi, per fare un esempio pratico, come utilizzare set per effettuare una modifica sulla proprietà BackgroundColor di un componente Label:
Da notare che l’assegnazione di un valore, che nell’esempio qui sopra è avvenuta in modo diretto ed esplicito, può avvenire anche tramite un espressione. Ad esempio un’altezza o una larghezza possono essere calcolate con espressioni del tipo:
Oppure, ancora, è possibile assegnare un valore ricavato da un’altra proprietà dello stesso o di un altro componente mediante un getter (cioè un blocco col quale non si setta, ma si recupera il valore di una data proprietà). Di seguito alcuni esempi di setter e getter relativi ad una ipotetica Label: