Sto svolgendo in questi giorni il corso sulla didattica laboratoriale e nelle giornata di ieri ho svolto un approfondimento sull’uso delle funzioni con il MakeCode editor di micro:bit che rendo pubblico su questo sito.
NOTA. Gli esempi in questo post hanno il solo scopo di mostrare l’utilizzo delle funzioni (chiamata di una funzione, passaggio per valore, restituzione di un valore da una funzione, ecc…) e non quello di risolvere un specifico problema, pertanto gli esempi potrebbero essere realizzati in modalità sicuramente più efficiente.
Le funzioni con BBC micro:bit
Una funzione consente di creare una porzione di codice che possiamo riutilizzare più volte nel nostro programma, quindi invece di copiare lo stesso codice in molte sezioni del programma, possiamo semplicemente utilizzare un unico blocco funzione da utilizzare all’interno del nostro codice tutte le volte che ci necessita.
Una funzione è definita dal suo nome e dal corpo della funzione che ospita tutte le istruzioni.
La funzione ha un nome univoco e non può essere costituita da parole staccate tra loro. E’ utile assegnare alle funzioni nomi che specificano cosa fa la funzione, ad esempio “calcoloVolume”, “calcoloArea”, “distanzaOstacolo”, “impostaLed”, “displayOn”. Si consiglia inoltre di adottare una notazione camel case (testo a cammello), ovvero scrivere parole composte o frasi, come il nome di funzioni, unendo tutte le parole tra loro, ma lasciando le loro iniziali con lettera maiuscola, in questo modo viene meglio decodificato da un essere umano il significato del nome composto. E’ buona regola adottare una strategia di questo genere anche per il nome delle variabili.
La prima lettera della frase può essere maiuscola o minuscola, tendenzialmente si preferisce usare la lettera minuscola.
Il corpo della funzione è il codice all’interno del blocco funzione, quello che viene chiamato body.
Esempio: calcolo dell’area di un quadrato.
Definiamo le due variabili: quadrato e lato che conterranno l’area del quadrato e la lunghezza del lato.
Realizziamo ora un programma che permette, con la pressione dei pulsanti A e B di impostare la lunghezza del lato del quadrato e successivamente, con un tilt a sinistra verrà visualizzato il calcolo dell’area del quadrato sul display del micro:bit:
Realizziamo un programma che alla pressione del pulsante A identifica lo stato di felicità della persona con una sequenza di icone, mentre alla pressione di B viene indicato lo stato di tristezza della persona, (ovviamente questo stesso programma potrà essere ottenuto in altre modalità diverse con una quantità di istruzioni inferiore, l’esempio è costruito per spiegare l’uso delle funzioni).
Parametri di una funzione
Se si desidera inviare alla funzione dei dati è possibile farlo utilizzando uno o più parametri. I parametri sono variabili utilizzate all’interno della funzione, vediamo a titolo di esempio una funzione che effettua il calcolo dell’area di un quadrato.
Oppure il passaggio può avvenire mediante l’uso di una variabile esterna passata alla funzione:
Esempio di una funzione che effettua il calcolo di un volume di un parallelepipedo:
I parametri di una funzione possono essere di tipi diversi, ad esempio possono essere delle stringhe (una sequenza di caratteri con un ordine prestabilito), dei booleani (vero/falso), valori interi ecc…
Nell’esempio che segue abbiamo la funzione “aggiungiStringhe” che in funzione del valore di “stato” (vero o falso) unirà stringa1 e stringa2 oppure stringa1 e stringa3.
Una funzione può utilizzare un parametro che viene utilizzato in una sottosezione della funzione.
In questo caso il parametro “messaggio” non viene utilizzato ed il codice unisce per tre volte “Ciao” e “,”. Nella variabile “ripetizione” si avrà la stringa: Ciao, Ciao, Ciao,
pertanto, nel caso in cui si volesse ripetere per 3 volte “messaggio” il programma deve essere modificato in questo modo:
Chiamare una funzione
La funzione quindi viene utilizzata come un blocco simile alle istruzioni standard di micro:bit, che possono essere utilizzate in altre parti del nostro programma. Per usare la funzione facciamo una chiamata di funzione, è come chiamare un amico per chiedere aiuto 🙂 , quindi la funzione ha un codice al suo interno che farà qualcosa per “aiutare” un’altra parte del vostro programma.
Nell’esempio che segue, la funzione “volumeCubo” viene chiamata due volte per calcolare due volumi di cubi con dimensioni diverse. Il codice nella funzione rimane in un posto. Non è necessario che venga copiato nel programma ovunque si voglia calcolare il volume di un cubo. In questo modo rendiamo il codice leggibile e riutilizzabile.
Vediamo un’altro esempio di chiamata di funzione. Alla pressione del pulsante A viene calcolata e visualizzata la media di una serie di 8 valori inseriti all’interno di un array:
Valore restituito da una funzione
Una funzione può restituire un valore al programma chiamante, quindi la restituzione di un calcolo o di uno stato specifico, ad esempio vero o falso, 0 oppure 1, ecc…
l’istruzione “return” restituisce il valore calcolato dalla funzione al programma che ha chiamato la funzione.
Nell’esempio che segue, alla pressione del pulsante A viene chiamata la funzione “randomZeroDieci” che genererà un numero casuale che verrà restituito alla funzione chiamante, “on button A pressed” ed in funzione del risultato mostrerà cose diverse sul display:
Solitamente l’istruzione “return” è posizionata nella parte finale della funzione, ovvero prima vengono fatti tutti i calcoli e poi restituito il valore, però potete inserire tutte le istruzioni di return che vi interessano all’interno della funzione, fate attenzione però che l’esecuzione del codice termina quando viene incontrata l’istruzione “return”. E’ quindi una buona regola posizionare il return alla fine del codice della funzione.
Nell’esempio che segue, all’avvio del micro:bit la funzione “cubo” è chiamata due volte per calcolare i due volumi. Il codice nella funzione rimane in un unico posto, non deve essere copiato nel programma in tutte le posizioni in cui volete calcolare i volumi, in questo modo rendiamo il codice leggibile e riutilizzabile.
Buon Coding a tutti 🙂