MySQL Java JavaScript PHP Python HTML-CSS C-sharp C++ Go

Returnarea unei valori și operatorul return

O metodă poate returna o valoare, un anumit rezultat. În exemplele de mai sus au fost definite două metode care aveau tipul void. Metodele cu acest tip nu returnează nicio valoare. Ele doar execută anumite acțiuni.

Dar metodele pot returna și o anumită valoare. Pentru aceasta se folosește operatorul return, după care urmează valoarea returnată:

return valoare_returnată;

De exemplu, să definim o metodă care returnează o valoare de tip string:

string GetMessage()
{
   return "Hello";
}

Metoda GetMessage are tipul string, prin urmare, trebuie să returneze un șir. De aceea, în corpul metodei se folosește operatorul return, după care este specificat șirul returnat.

Metodele care au un tip de returnare diferit de void trebuie să folosească obligatoriu operatorul return pentru a returna o valoare. De exemplu, următoarea definiție a metodei este incorectă:

string GetMessage()
{
   Console.WriteLine("Hello");
}

De asemenea, între tipul returnat al metodei și valoarea returnată după operatorul return trebuie să existe corespondență. De exemplu, în următorul caz, tipul returnat este string, dar metoda returnează un număr (tip int), deci o astfel de definiție a metodei este incorectă:

string GetMessage()
{
   return 3;   // Eroare! Metoda trebuie să returneze un șir, nu un număr
}

Rezultatul metodelor care returnează o valoare poate fi atribuit variabilelor sau utilizat în alt mod în program:

string GetMessage()
{
   return "Hello";
}

string message = GetMessage();  // obținem rezultatul metodei în variabila message
Console.WriteLine(message);     // Hello

Metoda GetMessage() returnează o valoare de tip string. Prin urmare, putem atribui această valoare unei variabile de tip string: string message = GetMessage();.

Sau chiar să o transmitem ca valoare parametrului altei metode:

string GetMessage()
{
   return "Hello";
}
void PrintMessage(string message)
{
   Console.WriteLine(message);
}
PrintMessage(GetMessage());

În apelul PrintMessage(GetMessage()), mai întâi se apelează metoda GetMessage(), iar rezultatul acesteia este transmis parametrului message al metodei PrintMessage.

După operatorul return pot fi specificate și expresii complexe sau apeluri ale altor metode care returnează un anumit rezultat. De exemplu, să definim o metodă care returnează suma numerelor:

int Sum(int x, int y)
{
   return x + y;
}

int result = Sum(10, 15);   // 25
Console.WriteLine(result);  // 25

Console.WriteLine(Sum(5, 6));   // 11

Metoda Sum() are tipul int, prin urmare, trebuie să returneze o valoare de tip int - un număr întreg. De aceea, în corpul metodei se folosește operatorul return, după care este specificat numărul returnat (în acest caz, rezultatul sumei variabilelor x și y).

Versiunea prescurtată a metodelor cu rezultat

De asemenea, putem scurta metodele care returnează o valoare:

string GetMessage()
{
   return "hello";
}

este echivalentă cu metoda următoare:

string GetMessage() => "hello";

Iar metoda:

int Sum(int x, int y)
{
   return x + y;
}

este echivalentă cu metoda următoare:

int Sum(int x, int y) => x + y;

Ieșirea din metodă

Operatorul return nu doar returnează o valoare, ci și produce ieșirea din metodă. De aceea, trebuie să fie definit după celelalte instrucțiuni. De exemplu:

string GetHello()
{
   return "Hello";
   Console.WriteLine("After return");
}

Din punct de vedere sintactic, această metodă este corectă, însă instrucțiunea Console.WriteLine("After return") nu are sens - nu se va executa niciodată, deoarece operatorul return returnează valoarea și produce ieșirea din metodă înainte de a ajunge la această instrucțiune.

Totuși, putem folosi operatorul return și în metode cu tipul void. În acest caz, după operatorul return nu se pune nicio valoare returnată (deoarece metoda nu returnează nimic). O situație tipică este ieșirea din metodă în funcție de anumite condiții:

void PrintPerson(string name, int age)
{
   if(age > 120 || age < 1)
   {
       Console.WriteLine("Vârstă nevalidă");
       return;
   }
   Console.WriteLine($"Nume: {name}  Vârstă: {age}");
}

PrintPerson("Tom", 37);         // Nume: Tom  Vârstă: 37
PrintPerson("Dunkan", 1234);    // Vârstă nevalidă

Aici, metoda PrintPerson() primește ca parametri numele și vârsta utilizatorului. Totuși, în metodă verificăm mai întâi dacă vârsta corespunde unui anumit interval (mai mică de 120 și mai mare de 0).

Dacă vârsta se află în afara acestui interval, afișăm un mesaj despre vârsta nevalidă și folosim operatorul return pentru a ieși din metodă. După aceasta, metoda își încheie execuția.

Totuși, dacă vârsta este corectă, afișăm informațiile despre utilizator pe consolă. Ieșirea pe consolă:

Nume: Tom  Vârstă: 37
Vârstă nevalidă