C# İsteğe Bağlı Parametreler

Merhaba arkadaşlar, bu yazımızda Parametreli Fonksiyonlara devam ediyoruz. Optional Arguments olarak tabir edilen, İsteğe bağlı argümanlar/parametreler olarak Türkçe karşılık bulan fonksiyonlara bakacağız. Normalde parametreli fonksiyonlar da ne yapıyorduk; bir parametre tanımlıyorduk. Şimdi ise herhangi bir parametre yollamasak dahi çalışan fonksiyonlara bakacağız.

Bir örnek üzerinden inceleyelim.

static int kuvvetAl(int x,int y=2){
int sonuc = 1;
for (byte i=0;i<y;i++){
sonuc *=x;
}

return sonuc;
}

static void Main(string[] args)
{
Console.WriteLine(kuvvetAl(6)); //Çıktısı 36 olur.

Console.WriteLine(kuvvetAl(2,5)); //Çıktısı 32 olur.

}

Yukarıda da gördüğünüz gibi sanki default değer tanımlar gibi yazıyoruz. Eğer y değeri gelmezse varsayılan olanı alıyor.

Adlandırılmış Parametreler

Adlandırılmış parametreler sizi bir fonksiyon çağırıldığında parametrelerin sırasını hatırlatma gereğinden kurtarır. Her bir parametre eşlediğimiz parametre adı ile belirtilir. Bunu bir örnek üzerinde göstereyim daha iyi anlarsınız.

Dikdörtgen Alanını bulmak için yükseklik ve genişlik değerleri gerekir. Örneğini aşağıdadır..

static int Alan(int y, int g){
return y*h;
}

// Aşağıdaki gibi çağırabiliriz..

static void Main(string[] args){
int sonuc=Alan(g:10, y:13);
Console.WriteLine(sonuc); // 130 
}

Bunu kullanmak için iki nokta üst üsteden sonra girilecek değeri yazıyoruz. Yukarıdaki örnekten anlaşılır umarım..

Parametrelere İletim

Bir fonksiyon çağırıldığında, fonksiyona parametreleri iletmek için 3 yol vardır. Değere göre, Referansa göre, Çıktı olarak.

Değere göre parametre değerini fonksiyonun resmi parametresine kopyalar. Burada, parametre üzerinde hiçbir etkisi olmadan, fonksiyon içindeki parametrede değişiklik yapabiliriz. C#’da varsayılan parametreli fonksiyon çağrısı bu şekildedir.

static void kare(int x)
{
  x = x * x;
}
static void Main()
{
  int a = 3;
  kare(a);

  Console.WriteLine(a); // Çıktı 3
}

Yukarıdaki örnekte gördüğünüz gibi fonksiyon a değerinin başlangıç değerini değiştirmiyor. kare fonksiyonu değişken üzerinde değil değer üzerinde çalışmaktadır.

Referans ile İletim

Referans ile iletim de ise hafıza adresi resmi parametre üzerine kopyalanır. Bu da parametre de yapılan değişikliğin değişkeni etkilediği anlamına gelir. Değeri referansa iletmek için ref anahtar kelimesi kullanılır. Aşağıdaki örnekden daha iyi anlayabilirsiniz.

static void kare(ref int x)
{
  x = x * x;
}
static void Main()
{
  int a = 3;
  kare(ref a);

  Console.WriteLine(a); // Çıktı 9
}

ref anahtar kelimesi; hafıza adresini, fonksiyonun gerçek değişkende çalışmasına izin veren fonksiyon parametresine iletir. ref anahtar kelimesi hem fonksiyonu tanımlarken hem de onu çağırırken kullanılır.

Çıktı Olarak İletim

Burada ise out anahtar kelimesi kullanılarak metotlar oluşturulur, fonksiyonu çağırırken de out anahtar kelimesi kullanılır. Bunu direkt örnek vermek istiyorum.

static void GetValues(out int x, out int y)
{
  x = 5;
  y = 42;
}
static void Main(string[] args)
{
  int a, b;
  GetValues(out a, out b);
  //Şimdi a=5 b ise 42 oldu.
}

Örnekte görüldüğü gibi referans tip gibi davranır. Değerleri fonksiyona gönderdiğimizde bize out değerlerini gönderdiğimiz değişkene yazıp geri yollar.

Umarım faydalı olmuştur..

Bunlara Göz Atmak İsteyebilirsiniz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir