Riprendiamo il discorso avviato nella seconda parte di questa introduzione.
Come abbiamo visto, nell’ultimo programma abbiamo utilizzato un ciclo infinito (il blocco per sempre) per fare muovere il nostro attore di continuo verso il puntatore del mouse. Poi abbiamo aggiunto una serie di comandi che venivano eseguiti solo una volta che il nostro attore abbia raggiunto il suo scopo, cioè quello di toccare il puntatore, per annunciare la vittoria e terminare il programma.
I blocchi che operano in questo modo sono appunto chiamati condizionali. Sono estremamente importanti nella programmazione, perché ci consentono di indirizzare il nostro programma su strade differenti a seconda di quello che succede, sia all’interno del programma, sia fuori, consentendogli di fare delle scelte.
Facciamo un paio di esempi (il codice già pronto è disponibile qui):
Quando clicchiamo sulla bandierina verde apparentemente non succede nulla. Se proviamo a premere le frecce di movimento sulla tastiera, Scratch Cat obbedirà ai comandi e si muoverà di conseguenza. Per fare tornare il gattino al punto di partenza, basterà cliccare il tasto ‘S’.
Il nostro programma ora reagisce ai nostri comandi!
Guardiamo il codice. C’è un ciclo per sempre all’interno del quale ci sono cinque gruppi logici (se… allora), ed ogni gruppo viene eseguito se viene premuto il tasto corrispondente. I primi quattro gestiscono i movimenti nelle quattro direzioni: orientano lo sprite nella direzione del movimento, lo fanno spostare nella direzione impostata e passano al costume successivo per animare il gattino. Il quinto, invece, viene eseguito alla pressione del tasto ‘S’: muove il gattino al punto di origine, lo 0,0 che è al centro del palcoscenico, lo allinea verso destra e termina l’esecuzione del programma.
L’esagono all’interno del blocco se è chiamato condizione: in scratch sono previsti varie tipologie di condizione, che sono collocate all’interno dei blocchi sensori ed operatori.
Nel primo gruppo, sensori, è possibile trovare tutte quelle che si possono verificare muovendo i nostri oggetti sul palcoscenico. Abbiamo già visto come possono essere utilizzate e ci torneranno utili per costruire giochi o programmi interattivi.
Di quelle che sono nel secondo gruppo, operatori, al momento guardiamo solo le tre che sono più importanti:
Questi tre blocchi ci consentono di combinare, in vario modo, più condizioni.
Facciamo un esempio pratico. Il nostro ultimo programma utilizza il tasto ‘S’ (inziale di stop) per mandare Scratch Cat a casa. Se ora volessimo modificare il codice in modo che anche il tasto ‘C’ (iniziale di casa) faccia la stessa cosa, ci basterà usare il blocco ‘o’ in questo modo:
Abbiamo aggiunto un operatore ‘o’ ed indicato una seconda condizione. Con questa modifica, ora il blocco se viene eseguito se si verifica una o l’altra o entrambe le condizioni – quindi sia se premiamo il tasto ‘S’ che il tasto ‘C’.
Proviamo ad eseguire il codice ed a verificare quanto abbiamo fatto.
Ora proviamo a sostituire ‘o’ con ‘e’ per vedere cosa succede:
Dopo aver fatto spostare Scratch Cat sullo schermo, se proviamo a premere ‘C’ o ‘S’ da soli non succede nulla… ma se premiamo i due tasti assieme vedremo tornare il nostro attore alla base. Il blocco ‘e’, infatti fa sì che il blocco venga eseguito quando entrambe le condizioni si verificano contemporaneamente.
Il terzo operatore ‘non’ non è utilizzato per combinare le condizioni, ma per alterarne il comportamento: la sua presenza indica che il ‘se’ deve esser eseguito se la condizione indicata non si verifica. Proviamo questo altro codice (disponibile qui):
Se proviamo ad eseguirlo, vedremo che il comportamento è rimasto lo stesso: il gattino si muove con le frecce e torna a casa con il tasto ‘S’.
Il flusso dei comandi è però diverso, ed abbiamo infatti introdotto due blocchi nuovi.
Il primo è ‘se…allora…altrimenti’: é un blocco più completo del ‘se…allora’ che abbiamo visto sino ad ora, perché consente di indicare due gruppi di comandi, il primo viene eseguito se la condizione si verifica, il secondo se la condizione non si verifica.
Il secondo è l’operatore ‘non’.
Riorganizzando i blocchi vecchi con questi nuovi abbiamo cambiato il comportamento del programma. Rimane il ciclo infinito, ma ora la prima cosa che facciamo fare al codice è quella di verificare che il tasto ‘S’ non sia premuto. Se è vero, passiamo ad eseguire il gruppo di comandi che verifica le condizioni dei tasti freccia. Se il tasto ‘S’ è invece premuto, vengono eseguiti i blocchi dentro altrimenti, che mandano a casa Scratch Cat e terminano il programma.
Gli operatori delle condizioni di Scratch, come nella maggior parte dei linguaggi di programmazione, possono assumere due valori: vero – se la condizione è verificata – e falso – se la condizione non è verificata. Se proviamo a cliccare su una condizione nella tavolozza dei comandi scratch ci dirà se le condizione è verificata o no rispondendo ‘True’ (Vero) o ‘False’ (Falso). In questo esempio, dove l’attore non tocca il colore blu, la risposta è, correttamente, falso.
Dato che gli operatori possono essere utilizzati anche dentro altri operatori, attraverso la loro combinazioni possiamo creare delle condizioni anche molto elaborate. Bisogna fare però particolare attenzione per essere sicuri che si comportino nella maniera desiderata: più si complica la catena più è facile commettere errori. Spesso è più semplice rivedere la sequenza dei blocchi ed utilizzare un approccio diverso per semplificare il lavoro: come abbiamo visto si possono utilizzare percorsi diversi per giungere allo stesso risultato. Per chi volesse fare approfondimenti, la logica utilizzata in queste operazioni è chiamata Algebra di Boole.
(segue qui)
Scratch è sviluppato dal Lifelong Kindergarten Group dei Media Lab del MIT. Vedi http://scratch.mit.edu