Bir öncekli yazimizda vb.net programlama dili kullanilarak Sinif Uyeleri, Yordamlar, Return Deyimi, Parametreler ve Deger ve Referans yoluyla parametre aktarmak bahsetmistik. Simdi ise Yordamlara farkli sayida parametre gondermek, Yinelemeli / Rekürsif Yordamlar ve Main yordamina göz atacagiz.
1-h Yordamlara farkli sayida parametre gondermek
Yordamlara sadece belirlenmis sayida parametre gönderebiliriz. Eksik veya fazla parametre gönderdigimizde hata aliriz. Fakat, bazen kullanicinin degisken sayida parametre gönderebilecegi yordamlarada ihtiyaç duyariz. Örnegin kullanicinin belirledigi sayidaki degerlerin en büyügünü, en küçügünü, ortalamasini veya toplamasini bulacak bir yordam için sayisi belirlenmis bir parametre listesi olusturmamiz sorun olacaktir. Bunu iki sekilde çözebiliriz. Öncelikle parametre yapisi dizi olan bir yordam tanimlayacagiz; daha sonrada kullanicinin bu yordama tanimladigi bir diziyi göndermesini saglayacagiz ya da yordam parametrelerini ParamArray anahtar sözcügüyle tanimlayacagiz. Asagidaki örnekte kullanici kendisinin belirledigi sayida degeri dizi haline getirip OrtalamaAl() yordamina göndermektedir. Yordam, gelen degerin ortalamasini verir.
Module nyp
Sub Main()
Dim degerler() As Byte = {10, 20, 30}
Dim ortalama As Byte
ortalama = OrtalamaAl(degerler)
Console.WriteLine("Sayilarin Ortalamasi : {0}", ortalama)
Console.ReadLine()
End Sub
Function OrtalamaAl(ByVal sayilar() As Byte) As Byte
Dim toplam As Byte
For x = 0 To sayilar.Count - 1
toplam += sayilar(x)
Next
Return toplam / sayilar.Count
End Function
End Module
ParramArray sözcügü tek farki dizi tanimlamaniza gerek kalmamasidir. Diziye istedigimiz kadar parametre gönderebiliriz. Bir yordam için sadece bir ParamArray niteleyicisi kullanilabilir. Ek olarak ayni yordama yukaridaki gibi dizi de gönderebiliriz.
Module nyp
Sub Main()
Dim ortalama As Byte
ortalama = OrtalamaAl(10, 20, 30)
Console.WriteLine("Sayilarin Ortalamasi : {0}", ortalama)
Console.ReadLine()
End Sub
Function OrtalamaAl(ParamArray sayilar() As Byte) As Byte
Dim toplam As Byte
For x = 0 To sayilar.Count - 1
toplam += sayilar(x)
Next
Return toplam / sayilar.Count
End Function
End Module
1-i Özyineli / Recursive Yordamlar
Kendi kendini çagiran fonksiyonlara özyineli (recursive) fonksiyon denilir. Özyineli fonksiyonlar, ileri bilgisayar uygulamalarinda çok kullanilir. Bilgisayar biliminin zor sayilan konularindan birisidir. Çogunlukla, döngülerle çözülebilen problemler, özyineli fonksiyonlarla çok daha kolay olarak çözülebilir. Özyineleme eylemi, problemi, en üstten baslayarak adim adim daha küçük parçalarina ayirir. Daha çok parçalanamayan en basit parçasina taban parçasi denilir. Özyineleme en üstten baslayarak tabana kadar iner. Sonra tabanda buldugu degeri geriye dogru en üste kadar tasir. Bu niteligi, döngülerden farklidir.
Bir çok programlama dili tarafindan desteklenen bu yöntemin en güzel örnegi bir sayinin faktöriyelinin bulunmasidir.
Imports System
Module Module1
Public Function f(ByVal x As Byte) As Byte
If x = 0 Then
Return 1
Else
Return x * f(x - 1)
End If
End Function
Sub Main()
Dim x As Byte = 4
Dim faktor As Byte = 0
faktor = f(x)
Console.WriteLine("{0}'nin faktöriyeli : {1} dir.", x, faktor)
Console.ReadLine()
End Sub
End Module
Birde 1'den 10'na kadar olan sayilarin toplaminin örnegini Recursive Fonksiyonu ile toplayalim.
Imports System
Module Module1
Public Function topla(ByVal deger As Byte) As Byte
If deger = 1 Then
Return 1
Else
Return deger + topla(deger - 1)
End If
End Function
Sub Main()
Dim deger As Byte = 10
Dim sonuc As Byte = 0
sonuc = topla(deger)
Console.WriteLine("1'den {0} kadar kadar olan sayilarin toplami : {1} dir.", deger, sonuc)
Console.ReadLine()
End Sub
End Module
1) Döngü ve özyineleme eyleminde bir blok deyim sürekli tekrar edilir.
2) Her ikisi tekrari sona erdiren kodlara sahip olmalidir.
3) Döngü, onu kontrol eden mantiksal ifadenin degerinin olumsuz olma-
siyla sonlanir.
4) Yinelemede ise ardisik çagrilar, taban denilen en küçük parçaya eri-
since sonlanir.
5) Döngü bir yerde sonlanmiyorsa, sonsuz kez ayni isi yapabilir.
6) Benzer sekilde özyinemele eyleminde, çagrilar taban parçaya inemi-
yorsa, özyineleme sonsuz kez tekrarlanir.
7) Genel olarak döngüde, ayni degisken adresine her adimda bulunan
yeni deger yazildigi için daha az bellek kullanilir.
8) Özyinelemede ise, üstten baslayarak tabana ininceye kadar çagrilan
fonksiyon degerleri bellekte tutulur. Dolayisiyla, çagri sayisi arttikça,
bellek kullanimi artar.
9) Genellikle, özyineleme yöntemiyle çözülen her problem döngü ile de
çözülebilir.
Neden Özyineleme Kullanilir ?
Bunun iki yaniti olabilir:
1) Özyineleme yöntemiyle karmasik problemlerin çözümü, çogunlukla, döngülerle yapilan çözümlerden daha basit ve daha kisadir. Özyineleme yöntemi, karmasik problemi taban denilen en basit haline indirger, oradan baslayarak adim adim asil problemi çözer.
2) Bazi dillerde döngü yoktur, onun yerine kendi kendisini çagiran özyineli fonksiyonlar kullanilir.
1-j Main Yordami
Consol Uygulamalari hazirlarken baslangiç noktasi olarak Main Yordami kullaniliyor. Program çalismaya basladigi zaman Main() yordamina konumlanir ve islemeye ordan baslar. Eger projede Main() yordami içeren birden fazla sinif varsa projenin “Properties” bölümünde “Startup Object” alaninda programin ilk baslayacagi sinifin adi seçilmelidir.