Fonksiyonlarda Return Deyimi ve Parametreler

Return Deyimi

Normal şartlarda çağrılan fonksiyon veya yordamdaki satırlar sıra ile işletilir. Fonksiyondaki bütün satırlar işletildikten sonra projenin işletimi söz konusu fonksiyonun çağrıldığı satırdan bir sonraki satıra geçer. Çağrılıp işletilen fonksiyondan veya metottan sonra işletilecek başka satır yoksa projenin işletimi aktif formda kalır. Fonksiyondaki bütün satırlar işletilmeden fonksiyondan çıkılabilir. Bu amaçla return deyiminden yararlanılmaktadır.

Aşağıda verilen konsol uygulamasında hazırlanan fonksiyonda kullanıcıdan toplanmak üzere 2 sayının girilmesi istenmektedir. Girilen sayılardan birisinin 0(sıfır) olması halinde fonksiyonun geri kalan satırları işletilmeyip fonksiyondan çıkılmaktadır. Bu konsol uygulamasındaki ”topla()” yordamının başına public yazmış olmama rağmen bu uygulamada bir tek sınıf olduğu için public deyiminin burada herhangi bir işlevi yoktur.

using System;

namespace Fonksiyon

{

class Sinif_1

{

public static void Main()

{

topla();

}

public static void topla()

{

string str1;

string str2;

int Sayi1;

int Sayi2;

int Sonuç;

Console.Write(”ilk sayıyı girin;”);

str1 ” Int32.Parse(Str1);

if (Sayi1 ==0)

return;

Console.Write(”ikinci sayıyı girin;”);

Str2=Console.ReadLine();

Sayi2= Int32.Parse(Str2);

if (Sayi2 == 0)

return;

Sonuç ” Sayi1 + Sayi2;

Console.WriteLine(Convert.ToInt32(Sonuç));

}

}

Daha önceki konularda nesnelerle ilgili oldukları için önceden tanımlı olan bazı yordamlarda parametreler kullanılıyordu. Örneğin daha önce TextBox nesneleri için tanımlı olan KeyPress() olayından söz edilmişti. KeyPress olayı çalışma anında kullanıcının klavyenin her hangi bir basması halinde meydana gelmekte ve söz konusu nesne ile ilgili olarak KeyPress() yordamı önceden hazırlanmış ise işletilmektedir.

private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)

{

}

KeyPress olayını temsil eden yordam adından sonra parantez içinde ”e” adında bir parametre vardır. KeyPress olayının meydana gelmesi sırasında hangi tuşa basılmışsa, basılan tuşun kodu ”e” parametresi sayesinde yordama gönderilir. Programcı, projenin bir yerinden başka bir yerine bilgi aktarmak amacıyla kullanılan bu değişkenin (parametre) içeriğinden yararlanıp istediği işlemleri yapabilir.

FONKSİYON İÇİN PARAMETRE TANIMLAMAK

Yukarıda hazırladığım fonksiyon geriye bir değer göndermediği gibi fonksiyon çağrılırken fonksiyona bilgi gönderilmedi. Şimdi yukarıda verdiğim Mesaj_Yaz() fonksiyonunda değişiklik yapıp fonksiyonun bir parametreye sahip olmasını sağlayacağım. Fonksiyon dışarıdan bilgi alacaksa veya parametrelere sahip olacaksa bu parametreler değişken tanımlanıyor gibi parantezin içine yazılmalıdır.

void Mesaj_Yaz(string text)

{

MessageBox.Show(text);

}

Mesaj_Yaz() fonksiyonu dışarıdan string tipte bilgi alacağı için parantezin içinde string tipinde bir değişken tanımladım. Fonksiyon çağrılırken dışarıdan birden fazla bilgi alacaksa parantezin içinde birden fazla değişken tanımlanır. Mesaj_Yaz() fonksiyonunu bu şekilde değiştirdikten sonra Form1_Click() yordamını aşağıdaki gibi düzenledim. Bu yordam işletildiğinde Visual Basic .NET’in InputBox() metodu ile kullanıcıdan mesaj girmesi istenir ve girilen bilgi Mesaj_Yaz() fonksiyonuna parametre olarak verilir.

private void Form1_Click(object sender, System.EventArgs e)

{

string mesaj;

mesaj = Microsoft.VisualBasic.Interaction.InputBox(

”Mesaj girin”, ”bilgi girişi”, ” ”, 200, 200);

Mesaj_yaz(mesaj);

}

Şimdi ise kendisine parametreler aracılığı ile gönderilen 2 sayıyı toplayıp ekrana yazan ”Topla()” adında bir fonksiyon hazırlayacağım. Hazırlamak istediğim fonksiyona dışarıdan int tipinde 2 sayısal bilgi aktaracağım için parantezlerin içine parametrelerin tipilerini ve adlarını aşağıdaki gibi yazdım. Bu metodun içinde tanımlanan ”sonuc” değişkeni metodun dışında tanımsızdır.

void Topla(int sayi1, int sayi2)

{

int sonuc;

sonuc = sayı1 + sayı2;

MessageBox.Show(Convert.ToString(sonuc));

}

Üzerinde çalıştığınız forma ait kod penceresinde bulunan bir fonksiyonu çağırmak için fonksiyonun adını yazmanız yeterlidir. Ancak işletilecek fonksiyon parametre içeriyor ve fonksiyona parametreler ile bilgi gönderilecekse, fonksiyonun çağrıldığı satırda fonksiyon adından sonra içerikleri fonksiyona aktarılmak istenen değişkenler veya bilgiler yazılır.

private void Form1_Click(object sender, System.EventArgs e)

{

int maas;

int mesai;

maas = 750000000;

mesai = 225000000

TopIn(maas, mesai);

}

Programın çalışması sırasında formun her hangi bir yerinde tıklama yapılırsa Click olayı meydana gelir ve Form_Click() metodu işletilir. Bu metottaki Topla() fonksiyonu işletilir.

FONKSİYONLARIN GERİYE DEĞER GÖNDERMELERİ

Yukarıda hazırladığım 2 fonksiyon geriye bir değer göndermiyorlardı. Bu nedenle fonksiyon adından önce void deyimini kullandım. Şimdi yukarıda verdiğim Topla() fonksiyonunda değişiklik yapıp bu fonksiyona gönderilen 2 sayının toplanıp sonucun geriye gönderilmesini sağlayacağım. Bu amaçla fonksiyon adının önüne yazdığım void deyimini silip yerine int yazdım.

Int Topla(int sayi1, int sayi2)

{

int sonuc;

sonuc = sayi1 + sayi2;

return sonuc;

}

Fonksiyon geride ne tür bilgi gönderecekse o bilgi tipinin fonksiyon adının önüne yazılması gerekir. Bu fonksiyon geriye int tipinde bilgi göndereceği için fonksiyon adının önüne int yazdım. Fonksiyonlarda geriye bilgi gönderme işlemi return deyimi ile yapılmaktadır.

Bu fonksiyon kendisine gönderilen 2 sayısal bilgiyi toplayıp ”sonuc” değişkenine aktardıktan sonra bu değişkenin içeriğini return deyimi ile geriye göndermektedir. Fonksiyonda bu şekilde değişiklik yaptıktan sonra fonksiyonu çağıran yordam veya fonksiyonda bazı değişikliklerin yapılması gerekir. Bu amaçla yukarıda verimiş olduğum Form1_Click() yordamını aşağıdaki gibi düzenledim.

private void Form1_Click(object sender, System.EventArgs e)

{

int maas;

int mesai;

int yekun;

maas = 750000000;

mesai = 25000000;

yekun = Topla(maas, mesai);

MessageBox.Show(Convert.ToString(yekun));

}

Konunun iyice anlaşılmasını sağlamak için şimdi başka bir fonksiyon hazırlayacağım. Hazırlamak istediğim fonksiyonu ”int” tipindeki bir sayının kare kökünü bulmak amacıyla kullanacağım. Bu fonksiyona int tipinde bir bilgiyi parametre olarak vereceğim için fonksiyon adından sonra parantezlerin arasına ”int X” yazdım. Buradaki ”X” parametrenin adıdır. Bu fonksiyon geriye double tipinde bilgi göndereceği için fonksiyon adından önce double yazdım.

static double karekok(int X)

{

double kok;

kok = Math.Sqrt(X);

return kok;

}

Bu fonksiyonda kullanılan Sign() ve Sqrt() fonksiyonları Math adlı Namespace’inde tanımlıdır. Bu nedenle fonksiyon adından önce Namespace adı yazılmalıdır. Yukarıda belirtildiği gibi Visual C#’ta geriye değer gönderme işlemi return deyimi ile yapılmaktadır. Bu fonksiyonu ve bu fonksiyonu çağıran satırları konsol uygulamasına yazdım.

using System;

namespace Fonksiyon

{

class sinif_1

{

public static void Main()

{

int sayi;

string str;

double sonuc;

Console.Write(”Karekökü alınacak sayısı girin :”);

str = Console.WriteLine(Convert.ToString(sonuc));

}

static double karekok(int X)

{

double kok;

kok = Math.Sqrt(X);

return kok;

}

Bu konsol uygulaması derlenip çalıştırıldığında kullanıcıdan karekökü alınacak sayı istenir. Ancak kesirli bir sayının karekökünü almak istememiz halinde hata meydana gelir. Çünkü yazdığım fonksiyonu dışarıdan int tipinde bilgi almak üzere düzenledim. Bunun önüne geçmek için girilen sayının int tipine dönüştürülöesi sağlanabilir. Bu örnekte kullanılan karekok() fonksiyonun double bilgi alıp geriye double tipinde bilgi gönderebilmesi için birtakım değişiklikler yaptım.

using System;

namespace Fonksiyon

{

public static void Main()

{

double sayi;

double sonuc;

string str;

Console.Write(”Karekoku alınacak sayısı girin :”);

str = Console.Readline();

sayi = Convert.ToDouble(str);

sonuc = karekok(sayi);

Console.WriteLine(Convert.ToString(sonuc));

}

static double karekok(double X)

{

double kok;

kok = Math.Sqrt(X);

return kok;

}

Diğer yandan eksi bir sayının karekökünü almak mümkün değildir. Bu şekilde düzenlenen konsol uygulaması çalıştırılıp eksi bir sayı girildiğinde programın çalışması kırılmaz ama kullanıcının bu konuda bilgilendirilmesi gerekir. Bu amaçla hazırlamış olduğum fonksiyonu aşağıdaki gibi düzenledim.

static double karekok(double X)

{

double kok;

if (Math.Sign(X) < 1)

{

Console.WriteLine(”girdiğiniz sayi negatif”);

return 0;

}

else

{

kok = Math.Sqrt(X);

return kok;

}

 

 

Submit a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir