  |
Ritorna un valore |
  |
return <espressione> |
In una classe Java abbiamo dei metodi. I metodi sono simili alle funzioni matematiche, in particolare prendono dei valori e ritornano dei risultati. A differenza delle funzioni però, dove il calcolo viene fatto solo con espressioni, i metodi fanno il calcolo eseguendo una serie di operazioni. Ricordiamo il fatto che le operazioni eseguite comportano la modifica della memoria, e che i risultati dei calcoli vengono memorizzati in variabili. Per fare si che un metodo ritorni un valore occorre dare un comando esplicito.
Questo comando è appunto return. Se si vuole che il metodo ritorni un determinato valore, calcolato con una espressione o memorizzato in una variabile, occorre usare return seguito dall'espressione che calcola il valore da ritornare.
Return ha anche un'altra importante funzione: termina l'esecuzione del metodo ritornando al chiamante.
  |
Deve essere compatibile con la dichiarazione |
int f() {
return 1;
}
Stack g() {
return new Stack();
}
void h() {
return;
}
L'espressione che segue il return non può essere qualsiasi: deve
essere una espressione di un certo tipo, compatibile con la
dichiarazione del metodo. Nel listato possiamo notare che abbiamo tre
diversi metodi, ciascuno con un diverso tipo ritornato. Nel primo caso
un tipo primitivo, nel secondo un oggetto e nel terzo niente. Il terzo
caso è speciale: usare void significa dire che il metodo non ritorna
valore(e quindi non può essere invocato in una espressione che
richiede un valore come un assegnamento: x=h() è un errore.
Si noterà che nel corpo del meotodo l'espressione che segue da un
risultato di tipo "compatibile" con quello dichiarato dal
metodo. Infatti se il metodo ritorna un intero, abbiamo una
espressione intera, se il metodo ritorna un oggetto, ne costruiamo uno
del tipo richiesto, e se invece il metodo ritorna void, dopo il return
non specifichiamo nessuna espressione. Da notare semplicemente che
vengono fatte le solite conversioni. Se dichiaro un metodo ritornare
double, anche se scrivo una espressione intera non c'è problema
perchè questa viene promossa a double. Come pure, se il meotodo
ritorna uno Stack, sarà possibile ritornare un oggetto di qualsiasi
classe derivata. Infatti, come vedremo abbondamentemente in seguito,
una classe è sostituibile con tutte le classi derivate. Ovvero " un
pesce rosso è anche un pesce". Ma riprenderemo il discorso.
|