Un frammento di lezione con un mentore come parte del corso Codegym University. Iscriviti al corso completo.


"Ancora tu, Amigo. Beh, ciao."

"Sembra che tu non sia molto felice di vedermi, Diego?"

"Ho avuto l'impressione che tu pensi di aver già imparato tutto quello che c'è da sapere sui metodi in Java."

"Oh, io non..."

"Non credo! Non ne sai nemmeno la metà."

"Certo, non disapprovo...

"Okay, basta parlare. È ora di iniziare. E inizieremo con qualcosa di semplice. Ad esempio, il fatto che Java abbia un'istruzione return . Ti consente di terminare istantaneamente un metodo in cui viene chiamato. Ecco l'istruzione:

return;

"È semplice: la parola solitaria returnseguita da un punto e virgola. Non appena il programma esegue questa istruzione, il metodo corrente termina e il metodo chiamante 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 0o to  maggiore della lunghezza dell'array, il metodo termina immediatamente.

"Il programma di cui 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 fillmetodo, 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)."

"Capito. È tutto ciò che fa questa affermazione?"

"In realtà, l' returnaffermazione è più utile di quanto pensi. È così utile che si trova in quasi tutti i metodi in Java. E ora ti condurrò a capire perché è così.

Metodi con risultato,void

"Probabilmente ti ricordi che ci sono affermazioni e ci sono espressioni . Qual è la differenza tra loro?"

"Se non sbaglio, un'espressione, a differenza di un'affermazione, ha un significato che può essere usato da qualche parte."

"Esatto. E, in Java, anche 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 di il calcolo .

"A proposito, hai già incontrato questi 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 il metodo viene dichiarato:

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.

"In altre parole, se scrivo il mio metodo e non voglio restituire nulla, dichiaro che il tipo del metodo è void, e basta?"

"Sì. E devo anche dire che Java ha molti di questi metodi.

Restituzione di un risultato

"Ho capito come dichiarare un metodo che restituisce il risultato di un calcolo/lavoro. Come faccio a restituire il risultato dal metodo stesso?"

"Questa è una domanda valida. L' returnistruzione ci aiuta ancora una volta. Il passaggio di un risultato da un metodo è simile a questo:

return value;

"L' returnistruzione terminerà immediatamente il metodo. Ed valueè ciò che il metodo dovrebbe restituire al metodo chiamante quando esce. Il tipo di valuedeve corrispondere a quello Typespecificato nella dichiarazione del metodo. Ecco alcuni esempi per rafforzare ciò che hai imparato:

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 stringa strvengono aggiunti a string result.
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)

"Eccellente. I metodi sono il mio nuovo superpotere!"

"Solo se ti eserciti abbastanza nelle attività pratiche. Più e più volte."