Le funzioni sono molto simili alla procedure ma differiscono visivamente in due particolari:
– hanno, anziché void, un tipo, proprio come se fossero delle variabili
– in fondo al corpo, appena prima della fine, hanno un return
tipo nomeFunzione (primoParametro, secondoParamentro, etc){ corpo della funzione; return nomeVariabile; }
La funzione, esattamente come una procedura, viene chiamata ed esegue il codice contenuto nel proprio corpo. Una volta arrivata al return prende la variabile posta alla sua destra e la restituisce a chi ha chiamato la funzione.
Il tipo posto in testa alla dichiarazione della funzione è il tipo che corrisponde alla variabile che verrà ‘ritornata’ dalla funzione.
Il seguente esempio è basato sul precedente ma leggermente modificato.
La variabile numero viene incrementata di 0,5 ad ogni ciclo e allo stesso tempo viene eseguita una divisione per due di numero.
Entrambi i risultati vengono stampati.
//Funzioni 9minuti.it float numero = 0; float incremento = 0.5; float numDiviso; float aggiungiNumero(float incremento){ numero += incremento; return numero / 2; } void setup() { Serial.begin(9600); } void loop() { Serial.print("Numero incrementato: "); Serial.println(numero); numDiviso = aggiungiNumero(incremento); Serial.print("Numero diviso 2: "); Serial.println(numDiviso); delay(1000); }
3 – 5 Dichiarazione di tre variabili di tipo float. Questo tipo serve quando necessitiamo di salvare dei numeri reali, ovvero quelli con la virgola.
7 – Dichiarazione della funzione, usiamo anche qui float come tipo perché il nostro incremento sarà di 0,5
9 – Sommiamo incremento a numero.
11 – return di numero / 2 Questa operazione non viene effettuata veramente su numero.
22 – Stampa della stringa Numero incrementato:
23 – Stampa della variabile numero
25 – Alla variabile numDiviso viene assegnato il valore del nostro return
27 – Stampa della stringa Numero diviso 2:
29 – Stampa della variabile numDiviso
Vi ripropongo ora lo stesso esempio pulito un po’. L’effetto prodotto è il medesimo ma è stata rimossa la variabile numDiviso.
//Funzioni 9minuti.it float numero = 0; float incremento = 0.5; float aggiungiNumero(float incremento){ numero += incremento; return numero / 2; } void setup() { Serial.begin(9600); } void loop() { Serial.print("Numero incrementato: "); Serial.println(numero); Serial.print("Numero diviso 2: "); Serial.println(aggiungiNumero(incremento)); delay(1000); }
24 – Si può notare il passaggio cruciale, ovvero una chiamata alla funzione come parametro di un’altra chiamata alla funzione.
Il codice va letto dall’interno verso l’esterno, ovvero prima
aggiungiNumero(incremento)
e il return diventa il parametro di
Serial.println(returnDiAggiungiNumero);
in aggiornamento