Memik Yanık - Kişisel Web Sitesi Ana Sayfa | Hakkımda | Kitap Önerileri | Fotoğraflarım | RSS RSS | İletişim

İsteğe Bağlı Parametreler


Bildiğiniz gibi Visual Basic kodu içinde .NET Framework ile gelen bazı sınıfların metotları eksik parametre ile çağrıla­bilin­mektedir. Başka bir deyişle bazı parametrelerin kullanılması isteğe bağlıdır. Derleyici eksik parametrelerin yerine varsayılan değerleri koymaktadır. Kendi hazırladığınız metotlarda isteğe bağlı parametrelerin olmasını istiyorsanız söz konusu parametreleri Optional olarak işaret edip varsayılan değerini aktarmanız gerekir. Bu konuda bilgi vermek için aşağıda verdiğim basit metodu hazırladım. 

Sub Topla(ByVal X As Long, ByVal Y As Long, ByVal Z As Long) 
  Dim Sonuc As Long 
  Sonuc = X + Y + Z 
  TextBox1.Text = Sonuc.ToString()
End Sub 

Bu şekilde düzenlenen metot çağrılıp kendisine 2 bilgi gönderildiğinde hata meydana gelir. Çünkü Sub tipi bu metot 3 parametreye sahiptir. İçinde bulunduğunuz şartlara göre 3 yerine 2 sayıyı toplamak istiyorsanız 3. parametreyi isteğe bağlı olarak ayarlamalısınız.

Bir parametrenin isteğe bağlı olmasını istiyorsanız o parametrenin tanımına Optional anahtar kelimesini ekleyip varsayılan bir değer aktar­malısınız. Hazırladığım metodu aşağıdaki gibi değiştirerek 3. parametrenin varsayılan değerinin 0 olmasını sağladım. Bu durumda bu metot 2 parametre ile çağrıldığında 3. parametrenin 0 olduğu varsayılır. 

Sub Topla(ByVal X As Long,ByVal Y As Long, Optional ByVal Z As Long = 0) 
   Dim Sonuc As Long 
   Sonuc = X + Y + Z 
   TextBox1.Text = Sonuc.ToString()
End Sub 

Aynı türden birden fazla parametreye sahip metotları hazırlarken ParamArray anahtar kelimesinden yararlanabilirsiniz. Bu anahtar kelimenin işlevini adım adım anlatmak için öncelikle aşağıdaki gibi basit bir metot hazırladım. 

Sub Toplam(ByVal Sayi1 As Integer, ByVal Sayi2 As Integer) 
   Dim Sonuc As Integer 
   Sonuc = Sayi1 + Sayi2 
   MessageBox.Show(Sonuc)
End Sub 

Bu şekilde hazırlanan metot aynı Class’ın içinden 2 parametreli olarak işletilebilir. Bu metot 2 yerinde 5-6 parametreye sahip olsaydı parantezlerin içinde bütün parametreler için değişken tanımlamak pratik olmamaya başlardı. Bu durumda metodun parametresinin dizi olması sağlanabilir. Bu amaçla Toplam() adını verdiğim metodu aşağıdaki gibi düzenledim. 

Sub Toplam(ByVal Sayilar As Integer()) 
  Dim Sonuc As Integer 
  For i As Integer = 0 To (Sayilar.Length - 1) 
    Sonuc = Sonuc + Sayilar(i) 
  Next 
  MessageBox.Show(Sonuc)
End Sub
 

Bu metottan yararlanarak kaç Integer değer toplanmak isteniyorsa önce o sayıda elemana sahip bir dizi değişken tanımlanıp bu metoda parametre olarak verilmelidir. Bu metodu nasıl kullandığımı aşağıda görebilirsiniz. 

Dim dizi(3) As Integer
dizi(0) = 100
dizi(1) = 200
dizi(2) = 300
dizi(3) = 400
Toplam(dizi)
  

Her ne kadar yukarıda yerli programcılık kitapları yazanlar tarafından kapatılmış yani register edilmiş(!) sayi1, sayi2 ve dizi’yi değişken adı olarak kullanmış olsam bile risk almamanızı ve bu değişkenlere İngilizce adlar vermenizi önermek isterim. 

Gördüğünüz gibi her iki yöntem de pratik değildir. Birincisinde aynı tipte çok sayıda para­metre tanımlamak, ikincisinde ise bilgileri dizi değişkene aktarmak gerekmektedir. ParamArray anahtar kelimesi sayesinde bu iki yöntemin zahmetli yanları giderilmektedir. Yukarıda Toplam() adını verdiğim metodun ParamArray kullanılmış halini aşağıda verdim. 

Sub Toplam(ByVal ParamArray Sayilar() As Integer) 
   Dim Sonuc As Integer = 0 
   For Each i As Integer In Sayilar 
     Sonuc = Sonuc + i 
   Next 
   MessageBox.Show(Sonuc)
End Sub
 

Parametrenin adından önce ParamArray deyimine yer vermekle aslında söz konusu parametrenin dizi değişken olduğu işaret edilmektedir. Zaten değişken adının sonuna paran­tezler “()” eklenerek söz konusu değişkenin dizi olması sağlanmaktadır. Bu sayede bu metot Integer tipindeki dizi değişkenleri parametre olarak alabilir. Bu nedenle metot aşağıdaki gibi işletilebilir. 

Dim dizi(2) As Integer
dizi(0) = 100
dizi(1) = 200
dizi(2) = 300
Toplam(dizi)
 

Tabi hemen itiraz edeceksiniz ve soracaksınız, ParamArray deyiminin bu şartlarda nasıl bir işlevi vardır? Haklısınız bu şartlarda bu metot yukarıda ParamArray’sız halinden farklı bir işleve sahip değilmiş gibi görünüyor. ParamArray deyiminin asıl işlevi bu metot işletilirken para­metrelerin dizi değişken olmasının şart olmamasıdır. Bu nedenle Toplam() adını verdiğim metot aşağıdaki gibi işletilebilir. 

Toplam(50, 150, 250) 

Toplam() metoduna aynı tipte 3 bilgiyi parametre olarak verince ParamArray deyimi sayesinde geri planda 3 elemanlı bir dizi değişken tanımlanır ve parametre olarak verilen bu bilgiler dizi değişkenin elemanlarına aktarılır. 

VB.NET 13.11.2009 05:42:52

YORUM YOK


YorumlarYorum Yaz
Ana Sayfa | Hakkımda | Kitap Önerileri | Fotoğraflarım | RSS | İletişim
Memik Yanık 2004-2009 © Tüm Hakları Saklıdır.
Hazırlayan www.semgoksu.com