Süreçler
VBScript'te programın akış kontrolünde kullanacağınız bir diğer grup araç
ise örneğin javascript veya Perl'de fonksiyon dediğimiz gruplandırılmış ve isimlendirilmiş
işlem kümeleridir. Bu kümeler programın bir yerinde topluca dururlar ve programın
başka bir yerinden isimleriyle çağrılırlar; veya bu kümelere isimleriyle referans
yapılır.
VBScript'te bu kümelenmiş kod gruplarına Prosedür (Süreç) denir. iki türlü
olur: fonksiyon (Function) ve Subroutine (sab-rutin okunur; kısaca Sub diye
yazılır ve sab diye okunur). Bu iki süreç arasındaki başlıca fark, fonksiyondan
kendisini çağıran komuta daima bir değer döner; Sub'dan dönmeyebilir. Sub, yapacağı
işi yapar ve programın kontrolünü kendine atıf yapılan noktaya devreder. VBScript'de
bir programa farklı yerlerde sık sık aynı işi yaptırıyorsak, bunu bir Sub ile
yaptırırız; fakat programımıza bir değer gerekiyorsa, bu değeri bir fonksiyona
hesaplattırırız. Her ikisi de kendilerine atıfta bulunan veya kendilerini göreve
çağıran satırdan (komuttan, deyimden) verilebilecek değerleri kabul edebilirler.
Biraz karışık oldu; ama bunu ilerde gerçek ASP uygulamaları yazarken daha iyi
anlayacağız. Şimdilik bir iki noktayı öylece öğrenmeye bakalım. Bir fonksiyonun
adı, tıpkı bir değişken adı gibi, fonksiyonun ürettiği değeri tutar; ve bu değer
kendisini çağıran komuta verilir. Diyelim ki, programımızın çeşitli noktalarında
yazı-tura atıp, elde edilecek sonuca göre bir iş yapmak zorundayız. Bu ihtiyacın
doğduğu yerde, yazı-tura komutlarını yazabiliriz. Ancak bu ortaya çok uzun bir
programın çıkmasına sebep olur. Oysa yazı-tura işlemlerini bir fonksiyonda toplar
ve ihtiyaç halinde sadece bu fonksiyonu çağırırsak ve fonksiyon bize o anda
yazı mı geldiğini, yoksa tura mı geldiğini bildirirse, işimiz çok kolaylaşmış
olur.
Böyle bir fonksiyon, yukarıdaki örnekten hareketle, şöyle olabilir:
<%
Function YaziTura
Dim ParaAt
Randomize
ParaAt = Int(Rnd * 2) + 1
if ParaAt = 1 then
YaziTura = "Yazı"
else
YaziTura = "Tura"
end if
end Function
%>
Bu fonksiyonu, ASP programının herhangi bir yerinden, şöyle bir yöntemle çağırabilir;
ve vereceği sonucu programın akışına uygun şekilde kullanabilirsiniz:
<%
NeGeldi = YaziTura
response.write NeGeldi
%>
Fonksiyonun sonunda end Function ifadesinin bulunduğuna ve fonksiyonun elde
ettiği sonucu kendi adına atadığımıza dikkat edin. DIM ifadesiyle böyle bir
değişken tanımlamadığımız halde VBScript, fonksiyonu çağırdığınız anda bunu
kendiliğinden yapacaktır.
Aynı işlemi Subroutine (Sub) olarak yazabiliriz. Fakat bu kez Sub, elde edeceği
değeri kendisi kullanacak ve bittiği anda kontrol programa geri dönecektir:
<%
Sub YaziTura()
Dim ParaAt
Randomize
ParaAt = Int(Rnd * 2) + 1
if ParaAt = 1 then
response.write "Yazı"
else
response.write "Tura"
end if
end Sub
%>
Fonksiyon adlarının sonuna, bizden beklediği değer varsa onları belirleyen
değişken adlarını parantez içinde yazarız. Fonksiyon bizden bir değer beklemiyorsa
açılan kapanan (boş) parantezlere ihtiyaç yoktur. ancak bir çok VBScript programcısı
bunu adet edinmiştir. Sub'ların çağrılması, fonksiyondan farklıdır. Sub'ın icra
edilmesini istediğiniz noktaya sadece adını yazarız. Sub'lar işleyebilmek için
bizden değer bekliyorsa, bu değerleri Sub adının yanına, parantez içine almadan
ve virgülle ayırarak, yazarız. Örneğin, Hesapla isimli ve bizden iki değer bekleyen
bir Sub şöyle çağrılır:
Hesapla 10, 20
Bu Sub işini bitirdiği anda programın akışı, Sub'a atıf yaptığımız noktada
devam eder.