CodeGym /Corsi /JAVA 25 SELF /Valori restituiti, return

Valori restituiti, return

JAVA 25 SELF
Livello 8, Lezione 3
Disponibile

1. Introduzione

Cominciamo con una domanda: perché un metodo dovrebbe restituire qualcosa? Perché non si può semplicemente fare tutto dentro il metodo e stampare il risultato a schermo?

Il punto è che spesso abbiamo bisogno non solo di eseguire un’azione, ma di ottenere un risultato che tornerà utile in altre parti del programma. Per esempio:

  • Un metodo calcola la somma di due numeri e la restituisce, così possiamo usare il risultato per calcoli successivi.
  • Un metodo determina se un numero è pari e restituisce true o false, in modo da poter prendere una decisione.
  • Un metodo restituisce una stringa di saluto per l’utente, e sta a noi decidere dove passarla — stamparla a schermo, salvarla su file, inviarla in rete.

Se i metodi stampassero sempre e solo il risultato, il nostro programma sarebbe vincolato a un unico scenario e riutilizzare la logica sarebbe difficile. Un valore restituito rende i metodi flessibili e universali.

Analogia

Immagina un distributore di caffè. Inserisci i soldi, premi il pulsante — e ottieni il caffè. Se la macchina dicesse solo a voce alta “Il caffè è pronto!” (ma non erogasse il caffè), non saresti contento. Così è con i metodi: a volte non basta sentire “Fatto!”, vogliamo ottenere il risultato.

2. Tipo del valore restituito: cosa può restituire un metodo

In Java, quando dichiari un metodo, specifichi il tipo del valore restituito — può essere qualunque tipo: int, double, String, boolean, un array, perfino un oggetto di una tua classe. Se il metodo non restituisce nulla — si scrive void.

Sintassi:

tip_vozvrashchayemogo_znacheniya imyaMetoda(parametry)
{
    // corpo del metodo
}
Firma del metodo

Esempi:

int sum(int a, int b) 
{
    // restituisce int
}

String getGreeting(String name) 
{
    // restituisce String
}

boolean isEven(int number) 
{
    // restituisce boolean
}

void printHello() 
{
    // non restituisce nulla — esegue solo un'azione
}

Importante! Il tipo del valore restituito è una “promessa” del metodo: è obbligato a restituire un valore di quel tipo. Se prometti di restituire un int, ma restituisci una String — il compilatore si “arrabbierà” e non ti farà compilare il programma.

3. Operatore return: come restituire un valore da un metodo

Per consegnare davvero il risultato del lavoro del metodo “all’esterno”, si usa l’operatore return. Questa parola dice: “Ecco il risultato — e con questo il mio lavoro è finito”.

int sum(int a, int b) 
{
    int result = a + b;
    return result; // restituiamo il risultato
}
Restituire un valore con return

Si può anche più corto:

int sum(int a, int b) 
{
    return a + b;
}

Quando il metodo raggiunge la riga return, termina l’esecuzione, restituisce il valore indicato e lo passa al punto da cui è stato chiamato.

Importante: il tipo del valore dopo return deve coincidere con il tipo dichiarato del metodo.

4. Uso del valore restituito: dove lo metto?

Quando un metodo restituisce un valore, puoi:

  • Salvarlo in una variabile.
  • Usarlo direttamente in un’espressione.
  • Passarlo a un altro metodo.
int result = sum(5, 7); // salviamo in una variabile
System.out.println(result); // stampiamo il risultato

System.out.println(sum(10, 20)); // stampiamo subito il risultato

if (isEven(42)) 
{
    System.out.println("Il numero è pari!");
}

Esempio: un metodo che restituisce una stringa

String getGreeting(String name) 
{
    return "Ciao, " + name + "!";
}

// Utilizzo:
String greeting = getGreeting("Alice");
System.out.println(greeting); // Ciao, Alice!

5. Pratica: esempi di metodi con valore restituito

Metodo che restituisce il massimo di due numeri

int max(int a, int b) 
{
    if (a > b) 
    {
        return a;
    } 
    else 
    {
        return b;
    }
}

Ancora più corto, se conosci già l’operatore ternario:

int max(int a, int b) 
{
    return (a > b) ? a : b;
}

Utilizzo:

int maximum = max(10, 25);
System.out.println("Massimo: " + maximum); // Massimo: 25

Metodo che restituisce true se il numero è pari

boolean isEven(int number) 
{
    return number % 2 == 0;
}

Utilizzo:

if (isEven(18)) 
{
    System.out.println("Il numero è pari!");
} 
else 
{
    System.out.println("Il numero è dispari!");
}

Metodo che restituisce la somma degli elementi di un array

int sumArray(int[] arr) 
{
    int sum = 0;
    for (int i = 0; i < arr.length; i++) 
    {
        sum += arr[i];
    }
    return sum;
}

Utilizzo:

int[] grades = {5, 4, 3, 5, 4};
int total = sumArray(grades);
System.out.println("Somma dei voti: " + total);

6. Cosa succede quando si chiama un metodo con return

Quando chiami un metodo con valore restituito, l’esecuzione del programma “entra” nel metodo, ne esegue il codice, arriva a return, restituisce il valore — e lo sostituisce al posto della chiamata.

Schema:

int a = 2;
int b = 3;
int c = sum(a, b); // qui si chiama sum(2, 3), viene restituito 5, c diventa uguale a 5

Diagramma di flusso

        graph TD
        A["main"] --> B["sum(a, b)"]
        B --> C[calcoli]
        C --> D[return result]
        D -->|il risultato viene restituito| A
    

7. Dettagli utili

return termina l’esecuzione del metodo

Non appena in un metodo si incontra return, l’esecuzione del metodo si interrompe immediatamente. Tutto ciò che è scritto dopo — non viene eseguito.

int test()
{
    return 42;
    System.out.println("Questo non verrà stampato"); // unreachable
}

return in un metodo di tipo void

In un metodo void (che non restituisce nulla) si può usare return senza valore — solo per terminare anticipatamente l’esecuzione del metodo, per esempio al verificarsi di una certa condizione.

void printPositive(int number)
{
    if (number <= 0) 
    {
        System.out.println("Il numero non è positivo!");
        return; // usciamo semplicemente dal metodo
    }
    System.out.println("Numero: " + number);
}

8. Errori tipici nell’uso di return

Errore n. 1: non tutti i percorsi restituiscono un valore

int getSign(int number)
{
    if (number > 0) 
    {
        return 1;
    }
    // E se number <= 0? Nessun return!
}
// Errore: non tutti i rami del codice restituiscono un valore

Come risolvere: prevedere sempre return in tutti i percorsi di esecuzione.

int getSign(int number)
{
    if (number > 0) 
    {
        return 1;
    } 
    else if (number < 0) 
    {
        return -1;
    } 
    else 
    {
        return 0;
    }
}

Errore n. 2: tipo del valore restituito non corrispondente

int getNumber()
{
    return "42"; // Errore! Atteso int, non String
}

Errore n. 3: return dopo return

int test()
{
    return 5;
    System.out.println("Questo non verrà eseguito"); // unreachable statement
}

Errore n. 4: return con un’espressione in un metodo void

void printSomething()
{
    return 42; // Errore! Un metodo void non può restituire un valore
}

Errore n. 5: ignorare il valore restituito

sum(10, 20); // e basta? Il risultato è andato perso!

Se non usi il valore restituito, va semplicemente perso. Non dimenticare di salvarlo o passarlo più avanti nel codice!

Errore n. 6: aspettarsi che return stampi qualcosa

int result = sum(2, 3);
// return non stampa nulla!
// È necessario stamparlo esplicitamente:
System.out.println(result);
1
Compito
JAVA 25 SELF, livello 8, lezione 3
Bloccato
Assistente intelligente per saluti personalizzati 🤖
Assistente intelligente per saluti personalizzati 🤖
1
Compito
JAVA 25 SELF, livello 8, lezione 3
Bloccato
Rilevatore di parità per un quiz educativo ❓
Rilevatore di parità per un quiz educativo ❓
1
Compito
JAVA 25 SELF, livello 8, lezione 3
Bloccato
Selezione del vincitore in una competizione a punteggio 🏆
Selezione del vincitore in una competizione a punteggio 🏆
1
Compito
JAVA 25 SELF, livello 8, lezione 3
Bloccato
Calcolo del punteggio totale per tutti i test di uno studente 📚
Calcolo del punteggio totale per tutti i test di uno studente 📚
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION