1. La returndichiarazione

Pensi di aver già imparato tutto sui metodi Java? Qualunque cosa tu pensi di sapere, ancora non ne conosci la metà.

Iniziamo con qualcosa di semplice. Ad esempio, Java ha un'istruzione return che ti consente di terminare istantaneamente il metodo che lo chiama. Ecco la dichiarazione:

return;

È semplice: la parola solitaria returnseguita da un punto e virgola. Non appena il programma esegue questa istruzione, il metodo corrente termina immediatamente e la chiamata continua.

Se returnviene chiamato nel mainmetodo, il mainmetodo terminerà immediatamente e con esso l'intero programma.

Esempio:

class Solution
{
   public static void fill(int[] data, int from, int to, int value)
   {


     if (from < 0 || to > data.length)
       return;

     for (int i = from; i < to; i++)
     {
       data[i] = value;
     }
   }

   public static void main(String[] args)
   {
     int[] months = {1, 2, 3, 4, 5, 6, 7, 8 ,9, 10, 11, 12};
     fill(months, 2, 10, 8);
   }
}


Il fill metodo riempie parte dell'array passato con value.
La parte dell'array da riempire è definita dagli indici from e to.
Se from è minore di 0o se to è maggiore della lunghezza dell'array, il metodo termina immediatamente.

Il programma sopra ha un fillmetodo che riempie l'array passato con value. Non riempie l'intero array, solo la parte specificata dagli indici frome to.

All'inizio del fill metodo, i valori passati vengono controllati per assicurarsi che siano validi. Se fromè minore di 0 o se to è maggiore della lunghezza dell'array, il fillmetodo termina immediatamente (esegue un'istruzione return).

Questa returnaffermazione è utile: praticamente ogni metodo in Java ne ha uno, ed ecco perché.



2. Metodi con risultato,void

Ricorda che una volta abbiamo capito che ci sono affermazioni e ci sono espressioni . Un'espressione, a differenza di un'istruzione, ha un valore che può essere utilizzato da qualche parte.

E, in Java, i metodi possono avere un valore . E questa è un'ottima notizia: i metodi non solo sono in grado di fare qualcosa in base ai parametri di input, ma anche, ad esempio, di valutare qualcosa e restituire il risultato del calcolo .

A proposito, hai già incontrato tali metodi:

double delta = Math.abs(d1 - d2);
Il abs()metodo restituisce un double
Scanner console = new Scanner(System.in);
int x = console.nextInt();

Il nextInt()metodo restituisce unint
String str = "Hello";
String s2 = str.toUpperCase();

Il toUpperCase()metodo restituisce aString
int[] data = {1, 4, 5, 6, 7, 8, 11};
int[] array = Arrays.copyOf(data, 4);

Il copyOf()metodo restituisce unint[]

Ogni metodo può restituire solo un valore di un tipo predeterminato. Il tipo restituito viene determinato quando viene dichiarato il metodo:

public static Type name(parameters)
{
  method body
}

Dove name è il nome del metodo, parameters è l'elenco dei parametri del metodo ed type è il tipo di risultato restituito dal metodo.

Per i metodi che non restituiscono nulla, esiste un tipo di segnaposto speciale: void.

Stai scrivendo il tuo metodo e non vuoi restituire nulla al metodo chiamante? Basta dichiarare il tipo del metodo come voide il problema è risolto. Ci sono anche molti metodi come questo in Java.


3. Restituzione di un risultato

Abbiamo appena capito come dichiarare un metodo che restituisce il risultato di un calcolo, ma come si ottiene questo risultato nel metodo stesso?

La returndichiarazione ci aiuta ancora una volta. Il passaggio di un risultato da un metodo è simile al seguente:

return value;

Dove returnè un'istruzione che termina immediatamente il metodo. Ed value è il valore che il metodo restituisce al metodo chiamante quando esce. Il tipo di valuedeve corrispondere a quello typespecificato nella dichiarazione del metodo.

Esempio 1. Il metodo calcola il minimo di due numeri:

int min(int a, int b)
{
   if (a < b)
     return a;
   else
     return b;
}
Il metodo restituisce il minimo di due numeri.

Se a < b
ritorno a
Altrimenti
ritornob

Esempio 2. Il metodo duplica la stringa passatagli nvolte:

String multiple(String str, int times)
{
   String result = "";
   for (int i = 0; i < times; i++)
     result = result + " "+ str;
   return result;
}
Il metodo accetta due parametri: una stringa e il numero di volte che la stringa deve essere ripetuta.
Viene creata una stringa vuota per il risultato futuro.

In un ciclo con timesiterazioni, uno spazio e la strstringa vengono aggiunti alla resultstringa.

La stringa resultviene restituita come risultato del metodo.

Esempio 3: il metodo calcola il massimo di due numeri utilizzando l'operatore ternario:

int max(int a, int b)
{
   return (a > b ? a : b);
}
Il metodo restituisce il massimo di due numeri.

ritorno (se a > b, allora a, altrimenti b)