1. Giriş
Gəlin sualla başlayaq: ümumiyyətlə metodun nəsə qaytarmasına niyə ehtiyac var? Niyə hər şeyi metodun daxilində edib nəticəni ekrana çıxarmamaq olar?
Məsələ ondadır ki, çox vaxt biz sadəcə hansısa əməliyyatı icra etməklə kifayətlənmirik, sonradan proqramın digər hissələrində işimizə yarayacaq nəticə əldə etmək istəyirik. Məsələn:
- Metod iki ədədin cəmini hesablayır və onu qaytarır ki, nəticədən sonrakı hesablamalarda istifadə edə bilək.
- Metod ədədin cüt olub-olmadığını müəyyənləşdirir və true və ya false qaytarır ki, qərar verə bilək.
- Metod istifadəçi üçün salamlaşma sətiri qaytarır, biz isə onu hara vermək barədə qərar veririk — ekrana çıxarmaq, fayla yazmaq, şəbəkə ilə göndərmək.
Əgər metodlar həmişə sadəcə nəticəni çap etsəydi, proqramımız tək ssenariyə sərt bağlı olardı və məntiqi yenidən istifadə etmək çətinləşərdi. Qaytarılan dəyər metodları çevik və universal edir.
Bənzətmə
Təsəvvür edin ki, kofe avtomatıdır. Pul atırsınız, düyməni basırsınız — və kofe alırsınız. Əgər avtomat sadəcə yüksək səslə “Qəhvə dəmləndi!” desəydi (amma kofe verməsəydi), sevinməzdiniz. Metodlarda da belədir: bəzən sadəcə “Hazırdır!” eşitmək yox, nəticə almaq istəyirsiniz.
2. Qaytarılan dəyərin tipi: metod nə qaytara bilər
Java-da metod elan edərkən siz qaytarılan dəyərin tipini göstərirsiniz — bu, istənilən tip ola bilər: int, double, String, boolean, massiv, hətta öz sinfinizin obyekti. Əgər metod heç nə qaytarmırsa — void yazırıq.
Sintaksis:
tip_vozvrashchaemogo_znacheniya imyaMetoda(parametry)
{
// metodun gövdəsi
}
Nümunələr:
int sum(int a, int b)
{
// int qaytarır
}
String getGreeting(String name)
{
// String qaytarır
}
boolean isEven(int number)
{
// boolean qaytarır
}
void printHello()
{
// heç nə qaytarmır — sadəcə əməliyyat icra edir
}
Vacibdir! Qaytarılan dəyərin tipi metodun “öhdəliyidir”: o, həmin tipdə dəyər qaytarmalıdır. Əgər siz int qaytaracağına söz verib String qaytarırsınızsa — kompilyator buna imkan verməyəcək və proqramı kompilyasiya etməyəcək.
3. return operatoru: dəyəri metoddən necə qaytarmaq olar
Metodun işinin nəticəsini həqiqətən “çölə” ötürmək üçün return operatorundan istifadə olunur. Bu söz belə deyir: “Budur, nəticə — və bununla da mənim işim bitdi”.
int sum(int a, int b)
{
int result = a + b;
return result; // nəticəni qaytarırıq
}
Daha qısa da olar:
int sum(int a, int b)
{
return a + b;
}
Metod return sətrinə çatanda icranı dayandırır, göstərilən dəyəri qaytarır və onu çağırıldığı yerə ötürür.
Vacibdir: return-dan sonra gələn dəyərin tipi metodun elan olunmuş tipi ilə üst-üstə düşməlidir.
4. Qaytarılan dəyərin istifadəsi: onu hara tətbiq etməli?
Metod dəyər qaytaranda siz onu belə edə bilərsiniz:
- Onu dəyişəndə saxlamaq.
- Birbaşa ifadədə istifadə etmək.
- Başqa metoda ötürmək.
int result = sum(5, 7); // dəyişəndə saxlayırıq
System.out.println(result); // nəticəni çıxışa veririk
System.out.println(sum(10, 20)); // nəticəni dərhal çıxışa veririk
if (isEven(42))
{
System.out.println("Ədəd cütdür!");
}
Nümunə: sətir qaytaran metod
String getGreeting(String name)
{
return "Salam, " + name + "!";
}
// İstifadə:
String greeting = getGreeting("Alisa");
System.out.println(greeting); // Salam, Alisa!
5. Təcrübə: qaytarılan dəyərlə metod nümunələri
İki ədədin maksimumunu qaytaran metod
int max(int a, int b)
{
if (a > b)
{
return a;
}
else
{
return b;
}
}
Əgər artıq ternar operatoru mənimsəmisinizsə, daha da qısa yaza bilərsiniz:
int max(int a, int b)
{
return (a > b) ? a : b;
}
İstifadə:
int maximum = max(10, 25);
System.out.println("Maksimum: " + maximum); // Maksimum: 25
Ədəd cütdürsə, true qaytaran metod
boolean isEven(int number)
{
return number % 2 == 0;
}
İstifadə:
if (isEven(18))
{
System.out.println("Ədəd cütdür!");
}
else
{
System.out.println("Ədəd təkdir!");
}
Massiv elementlərinin cəmini qaytaran metod
int sumArray(int[] arr)
{
int sum = 0;
for (int i = 0; i < arr.length; i++)
{
sum += arr[i];
}
return sum;
}
İstifadə:
int[] grades = {5, 4, 3, 5, 4};
int total = sumArray(grades);
System.out.println("Qiymətlərin cəmi: " + total);
6. return olan metodu çağıranda nə baş verir
Qaytarılan dəyəri olan metod çağırıldıqda proqramın icrası sanki metodun içinə “daxil olur”, onun kodunu icra edir, return-a çatır, dəyəri qaytarır və onu çağırıldığı yerə qoyur.
Sxematik olaraq:
int a = 2;
int b = 3;
int c = sum(a, b); // burada sum(2, 3) çağrılır, 5 qaytarılır, c 5-ə bərabər olur
Blok-sxem
graph TD
A["main"] --> B["sum(a, b)"]
B --> C[hesablamalar]
C --> D[return result]
D -->|nəticə qaytarılır| A
7. Faydalı nüanslar
return metodu yekunlaşdırır
Metodda return göründüyü andan metodun icrası dərhal dayandırılır. Ondan sonra yazılan heç nə icra olunmur.
int test()
{
return 42;
System.out.println("Bu çap olunmayacaq"); // unreachable
}
return void tipli metodda
void (heç nə qaytarmayan) metodda dəyərsiz return-dan istifadə etmək olar — məsələn, hansısa şərtdə metodu vaxtından əvvəl bitirmək üçün.
void printPositive(int number)
{
if (number <= 0)
{
System.out.println("Ədəd müsbət deyil!");
return; // sadəcə metodu tərk edirik
}
System.out.println("Ədəd: " + number);
}
8. return ilə işləyərkən tipik səhvlər
Səhv № 1: Bütün yollar dəyər qaytarmır
int getSign(int number)
{
if (number > 0)
{
return 1;
}
// Bəs number <= 0 olarsa? Return yoxdur!
}
// Səhv: kodun bütün budaqları dəyər qaytarmır
Necə düzəltmək olar: həmişə bütün icra yollarında return nəzərdə tutun.
int getSign(int number)
{
if (number > 0)
{
return 1;
}
else if (number < 0)
{
return -1;
}
else
{
return 0;
}
}
Səhv № 2: Qaytarılan dəyərin tipinin uyğunsuzluğu
int getNumber()
{
return "42"; // Səhv! Gözlənilən int idi, String deyil
}
Səhv № 3: return-dən sonra return
int test()
{
return 5;
System.out.println("Bu icra olunmayacaq"); // unreachable statement
}
Səhv № 4: void-metodda ifadə ilə return
void printSomething()
{
return 42; // Səhv! void-metod dəyər qaytara bilməz
}
Səhv № 5: Qaytarılan dəyəri görməməzlikdən gəlmək
sum(10, 20); // vəssalam? Nəticə itdi!
Əgər qaytarılan dəyəri istifadə etmirsinizsə, o, sadəcə itir. Onu saxlamağı və ya kod boyunca ötürməyi unutmayın!
Səhv № 6: return-in nəsə çap edəcəyini gözləmək
int result = sum(2, 3);
// return heç nə çap etmir!
// Aydın şəkildə çıxışa vermək lazımdır:
System.out.println(result);
GO TO FULL VERSION