return ifadəsi
Metodlar qitmət qaytararkən, return açar sözündən istifadə edildiyini görmüşdük. Amma return haqqında bilməli olduğumuz bəzi vacib şeylər var. Ümumiyyətlə, return bir proqram kontrol ifadəsidir. Bu kontrol ifadəsinin işi bir metodun işini dayandırmaqdan ibarətdir. Yəni bir metodun gövdəsində return varsa, proqram bu nöqtədən aşağıda qalan hissəni (metodun qapanış fiqurlu mötərizəsinə qədərki) icra etmədən ötürür.
Ümumiyyətlə return ifadəsi ancaq qiymət qaytaran metodlarda istifadə olunmur. Qeyd olunduğu kimi, return metodların işini dayandırır. Əgər metod qiymət qaytarmırsa, onda return ifadəsi qarşısında heç bir şey yazılmır. Əks halda, return ifadəsinin qarşısında qaytarılacaq qiymət yazılır. Məsələn aşağıdakı proqramda ―Metodum‖ adlı metod içərisindəki return ifadəsinə fikir verin:
using System; class Sinif
{
public void Metodum()
{
Console.WriteLine("Salam, necesen?"); return;
Console.WriteLine("Ne var ne yox?");
}
}
class Program
{
public static void Main()
{
Sinif ob = new Sinif(); ob.Metodum(); Console.ReadKey();
}
}
Bu proqramda Metodum adlı metodun icrası zamanı proqramın axışı return ifadəsini gördükdən sonra, metodun işi bu nöqtədə dayandırılır və return – dan sonrakı heç bir kod icra olunmur. Belə kodlara çatıla bilməyən kodlar (Unreachable codes) deyilir. Beləliklə, bu proqramda ekrana sadəcə ―Salam, necesen?‖ ifadəsi çıxır. Bu metodun heç bir qiymət qaytarmadığına və return ifadəsinin boş qeyd olunduğuna da fikir verin.
Qiymət qaytaran metodlarda isə return metodu yenə, metodun işini dayandırır, lakin əlavə olaraq metodun nəticəsi kimi geriyə bir qiymət ötürür. Çox vacib bir məqam var. Əgər bir metodun qaytarılma tipi void deyilsə, onda hökmən bu metod daxilində return ilə geriyə bir qiymət qaytarılmalıdır. Məsələn aşağıdakı proqramı kompilyasiya etmək
olmayacaq və bu bizə ―'Sinif.Metodum()': not all code paths return a value‖ xətasını
verəcək.
using System; class Sinif
{
public string Metodum()
{
Console.WriteLine("Salam, necesen?");
}
}
class Program
{
public static void Main()
{
Sinif ob = new Sinif(); ob.Metodum(); Console.ReadKey();
}
}
Çünki, Metodum() geriyə string tipdə bir qiymət qaytaracaq şəkildə təyin olunub, amma heç return ifadəsi ilə heç bir qiymət qaytarılmır. Bu sintaksik xətadır. Digər tərəfdən, əgər bir metod bir qiymət qaytaracaq şəkildə (void olmayan şəkildə) təyin olunubsa, onda o metodun hökmən bir qiymət qaytarmasını təmin etmək lazımdır. Məsələn aşağıdakı proqrama baxaq:
using System; class Sinif
{
public string Insan(int eded)
{
if (eded > 0) return "Tamerlan";
}
}
class Program
{
public static void Main()
{
Sinif ob = new Sinif(); ob.Metodum(5); Console.ReadKey();
}
}
Bu proqramda Insan() metodu sadəcə parametrinin müsbət olduğu hallarda bir qiymət qaytarır. Yəni parametrə ötürülən arqument mənfi olarsa, metod geriyə bir qiymət qaytarmayacaq. Bu isə yenə bayaqkı sintaksik xətaya səbəb olacaq. Ona görə də, geriyə qiymət qaytaran metodun istənilən vəziyyətdə bir qiymət qaytarmasına zəmanət vermək lazımdır. Metodun gövdəsini aşaöıdakı kimi dəyişsək, xəta aradan qalxacaq:
public string Insan(int eded)
{
if (eded > 0) return "Tamerlan"; else return "Rustambayli";
}
Bu metod həmişə geriyə bir qiymət qaytarır. Əgər şərt düzgündürsə geriyə ―Tamerlan‖, əks halda isə ―Rustambayli‖ ifadəsi döndürülür. Başqa variant ola bilməz. Bununla belə, son olaraq qeyd etmək lazımdır ki, geriyə qiymət qaytaran metodların qaytardığı qiymətin tipi, geri dönüş tipi ilə eyni olmalıdır. Aşağıdakı metoda baxaq:
public string Insan(int eded)
{
return true;
}
Metodun geri dönüş tipi string olduğu halda, bool tipdə qiymət qaytarmağa çalışdıq. Bu
bir sintaktik xətadır.
Dostları ilə paylaş: |