27 Şubat 2015 Cuma

Metotlar

Nesneye dayali programlama dillerinin yapi taslarindan biri de metotlardir. 
Metotlar programimizin fiili, yani yaptigi istir; olmazsa olmazidir. 
Insani bir program olarak düsünürsek yürümek, konusmak, bakmak... insnanin metotlari olur.
Baska bir degisle metot, belli bir isi yapmak için olusturulan program parcasidir. Alt programdir.
Örnegin yazdigimiz uygulamanin bir çok yerinde faktöriyel hesabi yapmamiz gerekiyorsa, bunu bir metot olarak bir kere  yazariz ve lazim oldugu her yerde, çagirmak suretiyle tekrar tekrar kullaniriz. Bu bize hem zaman hem de programimiza performans kazandiracaktir.
Zaten nesnesel programlamanin amaci da bu kolayligi ve kullanisligi saglamaktir.
Sub – End Sub
Belirli bir tekrar gerektiren komutlari her defasinda yeniden yazmak yerine bir prosedür içinde bir  kere yazar ve ihtiyacimiz oldugunda çagiririz.
Bütün çalisabilen kodlar mutlaka Sub prosedürün içinde olmalidir. Bir Sub procedürü Module, Class, Interface veya Structure içinde tanimlayabiliriz fakat bir Sub procedür içinde baska bir Sub tanimlanamaz.
Sart degildir fakat metotlara ad olarak bir fiil verilirse daha munsaip olur.
Kullanımı :
Sub isim(Parametreler)
Komut veya komutlar
End Sub
örnek :
    Sub KaresiniAl()
        Dim b As Integer
        Dim a As Integer = InputBox("Karesi alinacak sayiyi gir")
        b = a * a
        MsgBox(a & " Karesi: " & b)
    End Sub
InputBox ile girilen bir sayinin karesini aliyor. Çagirmak için KaresiniAl() yazmamiz yeterli.
Bu verdigim örnekteki metot disaridan parametre almiyor. Bazi metotlara ise bizim verdigimiz degerleri islemek içindir. Ayni metodu bir de parametre alacak sekilde, yani disaridan deger alacak sekilde yapalim:

Örnek :
    Sub KaresiniAl(ByVal sayi As Integer)
        Dim kare As Integer
        kare = sayi * sayi
        MessageBox.Show(sayi & " sayisinin karesi: " & kare)
    End Sub
“ Function-End Function ”
Bu tür metotlar Sub metotlarin tasidigi bütün özellikleri tasirlar; farkli olarak Procedure içinde meydana gelecek değer, Procedure çagrildiktan sonra herhangi bir degisken veya kontrole atanir. Bu yüzden döndürülecek deger Return ifadesi kullanilarak döndürülür. 
Ayrica dönecek olan degerin veri tipini de belirtmemiz gerekir.
Kullanımı :
Function isim ( Argümanlar) as Dönecek olan degerin veri tipi
Komutlar
Return dönecek olan değer
End Funciton
Bir fonksiyon End Function satiri ile biter. Ancak bazi sartlar gerçeklestiginde
fonksiyonun çalismasini bitirmeden çikmak için Exit Function kullanilabilir.
Örnek:
    Function Faktoriyel(ByVal f As Integer) As Integer
        Dim a, b As Integer
        a = 1
        For b = 1 To f
            a = a * b
        Next
        Return a
    End Function
Return nedir?
 Fonsiyonumuzdan dönecek degerin ne olmasini istiyorsaniz Return ile onu yazin. Yani Return ile dönecek olan degeri belirleriz. Bu durumda 'a' degiskeniydi, fakat isteseydik 5 gibi bir sayi da döndürebilirdik. Fakat dönecek degerin, fonksiyonumuzu ilk basta belirttigimiz tipten olmali (bu örnekte Integer).
Not: Metotlarimizi olustururken Private veya Public gibi anahtar kelimeleri kullanmadik. Bu durumda varsayilan olarak Public olacaktir. Bu da metotlarimizin forum içinden de forum disindan da kullanilabilecegini gösteriri. Private olarak tanimlasaydik yalnizca o forum/sinif icinde kullanabilirdik.
ByVal ve ByRef
ByRef olarak tanimlanmis parametrelerde parametrenin değeri degil, o parametrenin
bellekteki adresi gönderilir. Dolayisiyla bu parametreye atanan deger ayni bellek bölgesinde
degisiklik yapacagi için fonksiyonu çagiran yer de bu degisimden etkilenir.
Örnek:
 Sub Abc(ByRef x As Integer)
        x = 13
    End Sub
Abc() metodunu cagirip parametre olarak 'x' için, örnegin 10 degerini verelim:
        Dim Sayi As Integer
        Sayi = 10
        Abc(Sayi)
        MsgBox(Sayi)
Sonuç: 13'tür. Çünkü referans olarak bize dogrudan 'x' degiskenin adresi verildi.
Bunu bir de ByVal ile yapalim:
 Sub Abc(ByVal x As Integer)
        x = 13
    End Sub
      Dim Sayi As Integer
        Sayi = 10
        Abc(Sayi)
        MsgBox(Sayi)
Sonuç: 10'dur. 
Çünkü ByVal olarak tanimlanmis parametrelerde fonksiyona parametrenin ('x') adresi degil bir kopyasi gönderilir. Yani farkli bir bellek bölgesi. Bu iki kopya ayri bellek bölgelerini kullanacaklarindan parametrenin fonksiyon içindeki degisiminden çagiran yer etkilenmez.

Paylaş :

Yazar:

Facebook Yorumlar