Bilgisayar - Yazılım - ASP - SUB RUTIN VE PARAMETRELER

Onceden dedigimiz gibi bir sub rutine, ana programla bilgi (veri) alisverisi yapmadan kendi halinde
"mütedeyyin" ve "münferit" olarak is düsüyorsa adindan sonra parametre listesine bir sey yazmiyorduk.
Ancak artik bir sub rutinle daha profesyonel sekilde iletisim kurmanin vakti gelmedi mi? Evet, geldi..
Sub rutinin ana programdaki − tabi çagrildigi yere kadar olan − bütün degiskenlerin degerlerini
kullanabildigi, hatta bu degiskenlerin degerlerini degistirebildigi gerçegine hep beraber sahit olmustuk. (euler
prensibi) Ancak bu sakat bir durumdur. Istenmeyen sonuçlar dogurabilir. Çünkü programlari yazan yine
insanlardir. Ana programda kullandiginiz bir degisken adini, bir sub rutin içerisinde de rasgele kullanirsaniz
ve de degerini degistirirseniz ana programdaki degisken de degisecek ve belki ileriki islemlerde onemli
yanlisliklara sebebiyet verecektir. Bunu kokten çozmenin, yani programin sagligini dalginliga kurban etmeyi
onlemenin yolu degiskenleri Dim ile deklare edip sayfalarin basina da üsenmeyip <% OPTION EXPLICIT
%> yazarak bir degiskenin script içerisinde birden fazla deklare edilmesinin onüne geçmektir. Bu etkili
SUB RUTIN VE PARAMETRELER 86 ASP NEDIR?
SUB RUTIN VE PARAMETRELER 86 ASP NEDIR?
çozümdür. Artik seçim size kalmis: ben dikkatliyim, iyi araba sürerim.. felan diyorsaniz sozüm yok. Ama
yanlis yapabilme ihtimali iliklerinizde soguk rüzgarlar estiriyorsa ( ho! Bu ne demek? ) belli metodu
kullanabilirsiniz. Ama sunu belirtmeden geçmek istemiyorum: Ne kadar dikkatli olsaniz bile uzun kodlarda
kafaniz allak bullak oluyor. Tecrübeyle sabittir vesselam.
Simdi gerçege yaklasalim. Bir sub rutinin ana programla deger alisverisi yapabilmesi için sub..end sub
blogundaki isim tanimlamasindan hemen sonra parantez içinde kullanacagimiz degiskenleri yaziyoruz. Sub
sub_ismi ( degisken1, degisken2 ) gibisinden. Biraz teori daha. Prosedür (sub) ile çagrildigi yer arasindaki
deger iletisimi tek yonlü veya iki yonlü olabilir. Bu yüzden parantez içindeki parametreleri iki gruba ayrilir:
1. formal parametre, 2. degisken parametre. . Bir prosedür çagrildigi yerden bir degiskenin ya degerini alir
(value), ya da kaynagini alir (reference). Degerini alirsa – ki bunlar formal parametrelerdir – bu degiskenin
içerigini degistiremez. Yani onceki sayfada Euler teoreminin ispatinda oldugu gibi ana programdaki
degiskene müdahale edemez. Ancak parametre olarak o degiskenin kaynagini alirsa – bunlar da degisken
parametrelerdir – o degiskenin hem içerigini kullanir, hem de içerigine müdahale eder. Bir sub tanimlarken
hangi parametrenin formal parametre, hangisinin degisken parametre olacagini onüne yazdigimiz bir extra
deyimle belirliyoruz. Asagidaki ornek dediklerimizi netlestirecek:
Kod8. Parametre cinsleri
<%
KazanToAnkara = "40 dk."
KhamamToAnkara = "60 dk."
AyasToAnkara = "unuttum"
GolbasiToAnkara = "10 dk."
' ~~~~~~~~~~~~
Response.Write "Sub in icrasindan once..."
Response.Write "KazanToAnkara: " & KazanToAnkara & ""
Response.Write "KhamamToAnkara: " & KhamamToAnkara &
""
Response.Write "AyasToAnkara: " & AyasToAnkara & ""
Response.Write "GolbasiToAnkara: " & GolbasiToAnkara &
""
Response.Write "======"
' ~~~~~~~~~~~~
Call Ankara ( KazanToAnkara, KhamamToAnkara,
AyasToAnkara, GolbasiToAnkara )
' ~~~~~~~~~~~~
Response.Write "Sub in icrasindan sonra ana programdan
gorünen manzara..."
Response.Write "KazanToAnkara: " & KazanToAnkara & ""
Response.Write "KhamamToAnkara: " & KhamamToAnkara &
""
Response.Write "AyasToAnkara: " & AyasToAnkara & ""
Response.Write "GolbasiToAnkara: " & GolbasiToAnkara &
""
' ~~~~~~~~~~~~
Sub Ankara ( kazan, byref khamam, byval ayas, byval golbasi)
kazan = "yazin 100 bin TL idi"
khamam = "tam 1 milyon, yarim yani ogrenci 500 idi"
SUB RUTIN VE PARAMETRELER 87 ASP NEDIR?
SUB RUTIN VE PARAMETRELER 87 ASP NEDIR?
ayas = "valla bilmiyom iste ne diyim.."
golbasi = "belediye otobüsü gidiyo ya. ondan tam 300, yarim 200
bin"
Response.Write "Bir takim atamalardan sonra sub içinden
gorünen manzara..."
Response.Write "Kazan: " & kazan & ""
Response.Write "Khamam: " & khamam & ""
Response.Write "Ayas: " & ayas & ""
Response.Write "Golbasi: " & golbasi & ""
Response.Write "======"
End Sub
%>
Sayfadaki Çikti:
Sub in icrasindan once...
KazanToAnkara: 40 dk.
KhamamToAnkara: 60 dk.
AyasToAnkara: unuttum
GolbasiToAnkara: 10 dk.
======
Bir takim atamalardan sonra sub içinden gorünen manzara...
Kazan: yazin 100 bin TL idi
Khamam: tam 1 milyon, yarim yani ogrenci 500 idi
Ayas: valla bilmiyom iste ne diyim..
Golbasi: belediye otobüsü gidiyo ya. ondan tam 300, yarim 200
bin
======
Sub in icrasindan sonra ana programdan gorünen manzara...
KazanToAnkara: yazin 100 bin TL idi
KhamamToAnkara: tam 1 milyon, yarim yani ogrenci 500 idi
AyasToAnkara: unuttum
GolbasiToAnkara: 10 dk.
Yukaridaki ornegin kodlari çok açik. Ancak bazi yerlerin onemine deginelim.Burada üzerinde durulmasi
gereken yer, sub isminden sonra parantez içine virgüllerle siraya konulup yazilan parametrelerdir. Ilk
parametrenin (kazan) onünde hiçbir ifade yoktur. Onünde nasil bir parametre oldugu belirtilmeyen tüm
parametreler varsayilan olarak degisken parametredir. Yani onüne byref yazmakla yazmamak ayni seydir.
Ikinci parametre olan khamam in onünde byref var. Kazan ve khamam parametreleri degisken
parametrelerdir. Prosedüre bu parametrelerle degiskenlerin hafizadaki adresleri geçirilir (byref). Üçüncü ve
dordüncü parametrelerin (ayas, golbasi) onüne ise byval deyimi eklenmistir. Boylelikle prosedür içine bu
parametrelerle sadece tek yonlü olarak deger gelmis olacaktir. Bir formal parametre olan degiskene prosedür
içinde atadigimiz deger, sadece prosedür içinde geçerli olacaktir. Ana programdaki degisken bu degisiklikten
etkilenmeyecektir. Zira prosedür bu degiskenin sadece içerdigi degeri kullanacak sekilde parametre
tanimlamasina sahiptir.
Umarim yeterince açik bir sekilde anlatmisimdir bu mevzuyu. Ha bir de: eger prosedürünüz ana programdaki
bir degiskenin degerini kullanacaksa, ve bu degiskenin degerinin hatayla da olsa degismesini engellemek için
SUB RUTIN VE PARAMETRELER 88 ASP NEDIR?
SUB RUTIN VE PARAMETRELER 88 ASP NEDIR?
sub in arguman listesinde onüne byval yazarak sadece deger aktarimina müsaade etmeyi ihmal etmeyin.
Prosedürünüz, ana programdaki degiskenleri rasgele kullanmasin. Hangi degiskenlerle iliskideyse, hepsini
arguman listesinde belirtmek racon geregidir. Boylelikle hangi prosedür olursa olsun baslik kismina bakarak
hangi degiskenlerle ne sekilde is yaptigini anlarsiniz. Isiniz hizlanir.
EXIT SUB
Son olarak <% exit sub %> deyimini yad ederek bitirelim. Bu deyimi bir sub blogu içinde kullanirsaniz
program akisi, bu deyimi gorür gormez o sub blogundan çikar ve bu sub hangi satirdan çagrilmissa o satirdan
sonraki kodlari icra etmeye koyulur. Buna ihtiyacmiz olur mu? Evet, olur. Zaten bu deyim, bir sartli sinama
blogu içinde kullanilir genellikle. Belli bir kosul gerçeklestiginde veya gerçeklesmediginde sub içerisinde,
diger deyimlerin islenmeden çikilmasini saglar. Asagidaki banal ornege bakalim:
Kod9. Sub dan ani çikis ornegi
<%
pay = 5
payda = 2
Call bol ( pay, payda )
pay = 16
payda = 0
Call bol ( pay, payda )
' ~~~~~~~~
Sub bol ( x , y )
If y=0 Then
Response.Write x & " \ " & y & ": müjde! divijin bay ziro..
bumm.."
Exit Sub
End If
bolum = x \ y ' tam bolme
kalan = x mod y
Response.Write x & " \ " & y & " bolümü : "
Response.Write "bolüm: " & bolum & " : kalan: " & kalan &
""
End Sub
%>
Sayfadaki Çikti:
5 \ 2 bolümü : bolüm: 2 : kalan: 1
16 \ 0: müjde! divijin bay ziro.. bumm..
EXIT SUB 89 ASP NEDIR?
EXIT SUB 89 ASP NEDIR?
Evet, yürüdük... hiç durmadan!
Sub'in hikmetlerine degindik. Bir sonraki yazida beraber olabilmek ümidiyle.:)
(Bu arada vize sinavlarim umdugum gibi geçmedi. Pointerlerle ilgili arastirma odevim var. Kaynak
ariyorum. Gelecek Ramazan bayraminizi kutluyorum. Euler teoremi uydurmaydi, sallayin. Talebelere
basarilar. Ve saat: 01 56. )