Bu tarz metotlar void olarak tanımlanır. Çağıran kişiye hiçbir değer göndermez. Sadece scope'lar arasında belirtilen işlem gerçekleşir. Parametre alabilir ya da almaz. Kullanım kalıbı;
void MetotIsmi(veriTipi1 parametre1, veriTipi2 parametre2,...)
{
ifade;
}
2-Değer Döndüren Metotlar
Bu metotlarda parametreli yada parametresiz olarak tanımlanabilir. Çağırana return komutu vasıtasıyla bir değer döndürür. O değer istenirse bir değişkene atanır, istenirse de işlemlerde kullanılır. Kullanım şekli;
veriTipi MetotIsmi(veriTipi1 parametre1, veriTipi2 parametre2,...)
{
return ifade;
}
Burada return edilen ifade ile metodun veri tipi muhakkak aynı veri tipi olmalıdır. Return ifadesi metottan çıkış noktasıdır.3-Recursive (Kendisini Çağıran) Metotlar
Bir metot diğer metotları çağırdığı gibi kendisini de çağırabilir. Bu tip metotlara recursive metotlar denir. Örnek:
public static int Faktoriyel(int sayi)
{
int sonuc = sayi;
if(sayi != 1)
{
sonuc = sayi * Faktoriyel(sayi - 1);
}
return sonuc;
}
Yukarıdaki metot faktoriyel hesabı yapıyor. sayi 1'den farklı ise sayi'yi kendinden 1 eksik olan Metot ile çarpıyor. Bu içerdeki metot da onu kendisinden 1 eksik için yapmaya devam ediyor. sayi 1'e kadar azalarak bu şekilde gidiyor ve en son 1 olduğunda sonuc döndürülüyor. Bu metotu çağıran ana program ise aşağıdaki gibidir;static void Main(string[] args)
{
Console.WriteLine("Faktoriyeli alınacak sayıyı giriniz: ");
int a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(Faktoriyel(a));
Console.ReadKey();
}
Sayı klavyeden girilir. Metoda parametre olarak gönderilerek faktoriyel hesabı yapılır ve ekrana yazdırılır. Klavyeden bir a sayısı girdiğimizde programın akışı Faktoriyel metoduna devredilir. O da bir sonraki Faktoriyel metoduna devreder. Böylece iç içe çağırma durumu yaşanır.Recursive metotlar kodlanırken sonsuz döngüye girilmemesi için dikkatli olmak gerekir.Recursion sayısına dikkat etmek gerekir. C#'ta birbirini çağıran her metot stack dediğimiz programımızın akışını saklayan bir liste içinde saklanır. Stack, 1 megabayta kadar çıkabilir. Sınır aşılırsa StackOverflow hatası alınır. StackOverflow hatasından kaçmanın 2 yolu vardır;
1-Recursive metoduna limit koymak:
Recursive metoda bir parametre daha eklenir. Metot her çağrıldığında bu parametre bir arttırılarak yada eksiltilerek kontrol edilebilir.
2-GOTO kullanarak metodu Recursive yazmamak:
Eğer recursion sayısı 25.000-100.000 gibi sayıları geçecekse stackOverflow hatası almak normaldir. Bu durumlarda GOTO kullanılabilir.
Hiç yorum yok:
Yorum Gönder