Un fragment de prelegere cu un mentor ca parte a cursului Universității Codegym. Înscrie-te la cursul complet.


"Tu din nou, Amigo. Ei bine, salut."

— Se pare că nu ești foarte fericit să mă vezi, Diego?

„Am avut impresia că crezi că ai învățat deja tot ce trebuie să știi despre metodele în Java.”

"Oh, eu nu..."

"Nu cred! Nici măcar jumătate nu știi."

„Sigur, nu dezacord...

"Bine, destul de vorbit. Este timpul să începem. Și vom începe cu ceva simplu. De exemplu, faptul că Java are o instrucțiune return . Vă permite să terminați instantaneu o metodă în care este apelată. Iată declarația:

return;

„Este simplu: cuvântul solitar returnurmat de punct și virgulă. De îndată ce programul execută această instrucțiune, metoda curentă iese și metoda de apelare continuă.

„Dacă returneste apelată în mainmetodă, atunci mainmetoda se va încheia imediat și, odată cu ea, întregul program.

Exemplu:

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);
   }
}
Metoda fill umple o parte din tabloul transmis cu value.

Partea matricei care trebuie completată este definită de indici from și to.

Dacă from este mai mică decât 0sau dacă to  este mai mare decât lungimea matricei, atunci metoda se termină imediat.

„Programul de mai sus are o fillmetodă care umple matricea care i-a fost transmisă cu value. Nu umple întregul tablou, ci doar partea specificată de indici fromși to.

"La începutul metodei fill, valorile transmise sunt verificate pentru a se asigura că sunt valide. Dacă fromeste mai mică decât 0 sau dacă toeste mai mare decât lungimea matricei, atunci fillmetoda se termină imediat (execută o returninstrucțiune)."

— Am înțeles. Asta este tot ce face această declarație?

„De fapt, returnafirmația este mai utilă decât credeți. Este atât de utilă încât se găsește în aproape toate metodele din Java. Și acum vă voi conduce la înțelegerea de ce este așa.

Metode cu rezultat,void

"Probabil vă amintiți că există afirmații și există expresii . Care este diferența dintre ele?"

„Dacă nu mă înșel, o expresie, spre deosebire de o afirmație, are un sens care poate fi folosit undeva”.

„Corect. Și, în Java, metodele pot avea și o valoare . Și aceasta este o veste foarte bună: metodele nu numai că sunt capabile să facă ceva pe baza parametrilor de intrare, ci și, de exemplu, să evalueze ceva și să returneze rezultatul calculul .

„Apropo, ați întâlnit deja astfel de metode:

double delta = Math.abs(d1 - d2);
Metoda abs()returnează un dublu
Scanner console = new Scanner(System.in);
int x = console.nextInt();

Metoda nextInt()returnează unint
String str = "Hello";
String s2 = str.toUpperCase();
Metoda toUpperCase()returnează aString
int[] data = {1, 4, 5, 6, 7, 8, 11};
int[] array = Arrays.copyOf(data, 4);

Metoda copyOf()returnează unint[]

„Fiecare metodă poate returna o singură valoare a unui tip predeterminat . Tipul returnat este determinat atunci când metoda este declarată:

public static Type name(parameters)
{
  method body
}

Unde nameeste numele metodei, parameterseste lista de parametri ai metodei și typeeste tipul rezultatului pe care îl returnează metoda.

Pentru metodele care nu returnează nimic, există un tip special de substituent: void.

"Cu alte cuvinte, dacă îmi scriu metoda și nu vreau să returnez nimic, atunci declar tipul metodei ca fiind void, și atât?"

„Da. Și, trebuie să spun, de asemenea, că Java are destul de multe astfel de metode.

Întoarcerea unui rezultat

"Mi-am dat seama cum să declar o metodă care returnează rezultatul unui calcul/lucru. Cum returnez rezultatul din metoda în sine?"

„Aceasta este o întrebare validă. returnDeclarația ne ajută încă o dată aici. Transmiterea unui rezultat dintr-o metodă arată astfel:

return value;

returnInstrucțiunea va termina imediat metoda. Și valueeste ceea ce metoda ar trebui să revină la metoda de apelare când iese. Tipul de valuetrebuie să se potrivească cu cel Typespecificat în declarația metodei. Iată câteva exemple pentru a consolida ceea ce ați învățat:

Exemplul 1. Metoda calculează minimum două numere:

int min(int a, int b)
{
   if (a < b)
     return a;
   else
     return b;
}
Metoda returnează minimum două numere.

Dacă a < b
se întoarce a
În caz contrar,
se întoarceb

Exemplul 2. Metoda dublează șirul transmis de nori:

String multiple(String str, int times)
{
   String result = "";

   for (int i = 0; i < times; i++);
     result = result + " "+ str;
   return result;
}
Metoda ia doi parametri - un șir și numărul de ori în care șirul trebuie repetat.
Este creat un șir gol pentru rezultatul viitor.

Într-o buclă cu timesiterații, un spațiu și șirul strsunt adăugate la șir result.
Șirul resulteste returnat ca rezultat al metodei.

Exemplul 3: Metoda calculează maximum două numere folosind operatorul ternar:

int max(int a, int b)
{
   return (a > b ? a : b);
}
Metoda returnează maximum două numere.

returnează (dacă a > b, atunci a, altfel b)

"Excelent. Metodele sunt noua mea superputere!"

„Numai dacă exersezi suficient în sarcinile practice.