Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
| Cevap: ASP Anlatımı (Dökümandır)
Next
Bu durumda For..Next döngüsü, Degisken1’in değerinin Degisken2’den yüksek olduğunu belirlerse, derhal döngüyü durdurarak, Next’ten sonraki satıra gidecektir.
Do döngüsünden ise Exit Do ile çıkababiliriz. Bu ifadenin kullanımı da Exit For gibi olur.
Süreçler (Prosedürler)
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ç Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir. 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.
Sık Kullanacağımız Hazır Fonksiyonlar
VBScript’te kullanabileceğimiz bir iki hazır-fonksiyona yukarıda değindik. Tesadüfî sayı üreten Rnd() fonksiyonu bunlardan biriydi; ayrıca Int() fonksiyonu ile kesirli bir sayının tam bölümünü alabildiğimizi gördük. VBScript’in kullanılmaya hazır daha bir çok fonksiyonu vardır; ancak ASP uygulamalarında sık kullanacağımız ve özellikle metin düzenlemeye ait olan bir kaçını burada sıralayalım.
Tarih ve saat
Belki de Web’in zamana çok bağlı oluşu dolayısıyla, Visual Basic’in hemen hemen bütün zaman-tarih fonksiyonları VBScript’te de kullanılır.
Date: Bugün tarihini verir. (25.03.2000 gibi)
Time: O andaki saati verir. (22:24:40 gibi)
Now: O andaki tarih ve saati birlikte verir. (25.03.2000 22:24:40 gibi)
VBScript’in buna ek olarak Weekday (haftanın günü Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir. , WeekdayName (günün adı) ve Monthname (ayın adı) fonksiyonları da vardır. Bu fonksiyonlar değerlerini Date fonksiyonuna göre alırlar. Örneğin,
<%= WeekdayName(Weekday(Date))%>
komutu bize bugün Cumartesi ise “Cumartesi” değerini verir.
<%= MonthName(Month(Date))%>
komutu bize bu ay Mart ise “Mart” değerini verir. VBScript’in bunlara ek olarak Day (gün), Month (ay) ve Year (yıl) fonksiyonları da değerlerini Date fonksiyonundan alarak, size bir rakam verirler. Eğer tarih 25 Mart 2000 ise:
<%= Day(Date)%>... 25
<%= Month(Date)%>... 3
<%= Year(Date)%>... 2000
değerini verir. VBScript, bu değerleri doğruca işletim sisteminden alır. Dolayısıyla işletim sisteminin bölgesel ayarları Türkiye için yapılmışsa, gün adları Türkçe olarak dönecektir. Ayrıca, tarih ve saat biçimleri de bölgesel ayarlara bağlı olarak, ay önde, gün arkada veya tersi, saat de 12 saat veya 24 saat esasına göre döner. ASP programlarınızı kişisel Web Server’da denerken kendi bilgisayarınızın tarih ve saatini; gerçek Internet’te çalıştırırken Server’ın tarih ve saatini alırsınız. Sayfalarınızda ay ve gün adlarını Türkçe görüntülemek için, önce Server’ın bölgesel ayarlarını sınamanız ve eğer isimler Türkçe gelmiyorsa, bunları çeviren Sub’lar veya fonksiyonlar yazmanız gerekebilir.
Karakter-dizisi Düzenleme
Karakter-dizisi veya String, VBScript için herşey olabilir. “Sana Sevdanın Yolları Bana Kurşunlar” bir String’dir. “Bugün 7 Ağustos 2000” bir String’dir. “Doğum Günün Kutlu Olsun!” bir String’dir. Web sitemizi ziyaret eden kişinin formlarımıza yazacağı ve Gönder tuşunu tıklayarak Server’a göndereceği bilgiler String’dir. Fakat bunların hepsi olduğu şekliyle işimize yaramaz. Bunları yeniden düzenlemek, içinden seçmeler yapmak veya biçimlerini değiştirmek gerekebilir. VBScript bu amaçla kullanılmaya hazır bir dizi fonksiyon verir:
InStr Uzun bir String’in içinde vereceğiniz daha kısa bir String’in bulunup bulunmadığını arar; bulursa bu kısa String’in başlama noktasının değerini verir. Diyelim ki, “Sana Sevdanın Yolları Bana Kurşunlar” String’ini Kayahan değişkenine, “Sevda” kelimesini de Ara değişkenine atadınız. InStr fonksiyonu ile Ara’nın değerinin yerini Kayahan’ın değerinin içinde bulabilirsiniz:
Yer = InStr(Kayahan, Ara)
Yer’in değeri 6 olacaktır; çünkü “Sevda” kelimesi, uzun String’de 6’ncı karakterden başlamaktatır.
Len Bir String’in uzunluğunu belirler. Yukarıdaki örnekte yer alan Kayahan değişkenin uzunluğunu şöyle belirleyebiliriz:
Uzunluk = Len(Kayahan)
Uzunluk değişkeninin değeri 36 olacaktır.
UCase Vereceğiniz bir String’in tüm karakterlerini büyük harfe çevirir.
YeniString = UCase(Kayahan)
Yeni String’in değeri: “SANA SEVDANIN YOLLARI BANA KURŞUNLAR” olacaktır.
LCase Vereceğiniz bir String’in tüm karakterlerini küçük harfe çevirir.
YeniString = LCase(Kayahan)
Yeni String’in değeri: “sana sevdanın yolları bana kurşunlar” olacaktır.
LTrim, RTrim, Trim Verdiğiniz String’in (sırasıyla) solunda yani baş tarafında; sağında yani sonunda ve hem başında ve hem de sonundaki boşlukları temizler.
Space İçinde, vereceğiniz sayı kadar boşluk olan boş bir String oluşturur. Örneğin
Bosluk = Space(20)
Bosluk değişkenin değeri “ “ (20 boşluk) olacaktır.
String İstediğiniz sayıda ve istediğiniz bir karakterle bir String oluşturur.
YeniString = String(3, “*”)
YeniString değişkeninin değeri “***” olacaktır.
Left, Right Bir String’in içinde soldan (baştan) veya sağdan (sondan) verdiğiniz sayıya kadar olan karakterleri verir. Örneğin, yine yukarıdaki Kayahan değişkenini kullanırsak:
Solda = Left(Kayahan, 4)
Solda değişkeninin değeri “Sana” olacaktır; çünkü Kayahan değişkeninin soldan itibaren dört harfi “Sana“ kelimesine denk geliyor.
Mid Bir String’in içinde başlangıç noktasını ve karakter olarak boyunu verdiğiniz alanda yer alan String’i verir.
Ortada = Mid(Kayahan, 5, 8)
Ortada değişkeninin değeri “Sevdanı” olacaktır; çünkü Kayahan değişkeninin soldan 5’nci değişkeninden itibaren 8 karakterlik alanda “Sevdanı” karakterleri yer alıyor.
Dizi-Değişken (Array) Fonksiyonu
VBScript’in dizi-değişken oluşturmada Array() fonksiyonu ile sağladığı kolaylıklara kısaca değindik. Fakat Array ile daha bir çok iş yapabiliriz; ve dizi değişken oluşturmakta VBScript’in diğer bazı kolaylıklarından yararlanabiliriz. Dizi-değişkenler, özellikle Web ziyaretçilerimizden gelecek bilgilerin kaydedilmesinde; veritabanından çekeceğimiz verilerin kullanılır hale getirilmesinde yararlı bir araçtır. Dolayısıyla ASP sayfalarınızda sık sık çok-boyutlu dizi değişkenlerden yararlanacaksınız. Bunun için gerekli araçları kısaca ve topluca ele almamız yerinde olur.
Bir dizi değişken oluştururken, değişkenin eleman sayısını belirtmezsek, VBScript, kendi kendine “Anlaşılan bu diziyi dinamik yapmamı istiyorlar!” der; ve daha sonra elemanlarının değerleri sonradan belirtilebilecek ve eleman sayısı sonradan arttırılabilecek bir dinamik dizi-değişken oluşturur. (“VBScript iyi huyludur,” demiş miydim?) Örnek:
Dim Ogrenciler()
Bu komutla, Ogrenciler dizi-değişkeni oluşturulur; ancak eleman sayısı belirtilmediği için dizi dinamiktir; yani daha sonra bu dizinin eleman sayını belirleyebilirsiniz. Bunu:
ReDim Ogrenciler(15)
gibi bir komutla yapabiliriz. Şimdi aklınıza şu soru gelebilir: Peki neden Ogrenciler dizisini baştan eleman sayısını belirterek tanımlamıyoruz? Güzel soru! Cevabı şu olabilir mi? Dizi-değişkenimizin eleman sayısını henüz bilmiyoruz; ve programın akışı içinde bu sayı, başka bir fonksiyonun, Sub’ın veya kullanıcı girdisinin sonucu olarak belirlenebilir. Fakat hemen belirtmek gereken bir nokta var: ReDim komutu, mevcut bir dizi-değişkenin içindeki herşeyi siler! Mevcut dizinin elemanlarını ve onların değerlerini korumak istiyorsak:
ReDim Preserve Ogrenciler(20)
yazmamız gerekir. Buradaki Preserve (koru) komutu, VBScript’e mevcut dizi içindeki elemanları korumasını, ve eleman sayısını 20’ye çıkartmasını bildirir. Buna neden gerek olabilir? Ziyaretçinin tercihleri değişebilir; örneğin bir elektronik alışveriş sitesinde ziyaretçiniz yeni şeyler alabilir; daha önceki alışverişlerine ilişkin verileri tuttuğunuz dizi-değişkenin eleman sayısını, daha önceki bilgileri silmeden arttırmanız gerekir.
VBScript’in dizi-değişkenlerini tümü aynı adı taşıyan bir liste olarak düşünebilirsiniz; sadece değişken adının yanında dizinin kaçıncı elemanı olduğunu belirten sayı bulunur:
Ogrenciler(1): Necip
Ogrenciler(2): Serap
Ogrenciler(3): Neslihan
Fakat VBScript çok boyutlu dizi değişken de oluşturabilir. İki boyutlu dizi-değişkeni tablo gibi düşünün; dizinin elemanları aynı adı taşıyan değişkenler fakat bu kez sadece tek sayı değil sıra ve sütun numaraları ile belirleniyorlar:
Ogrenciler(1,1): Necip
Ogrenciler(1,2): Serap
Ogrenciler(1,3): Neslihan
Ogrenciler(2,1): Selim
Ogrenciler(2,2): Murat
Ogrenciler(2,3): Merve
Ogrenciler(3,1): Elif
Ogrenciler(3,2); Hande
Ogrenciler(3,3): Leyla
Şimdi, burada üç sıralı, üç sütunlu bir tablo getirebilirsiniz gözünüzün önüne. Bu dizi-değişkeni şu komutla oluşturabiliriz:
Dim Ogrenciler(3,3)
Böyle bir değişkende sözgelimi birinci sıra (numarası 1,x olanlar) çalışkanları, ikinci sıradakiler (2,x’ler) daha az çalışkanları vs., belirtebilir. VBScript, üç, dört ve hatta beş boyutlu dizi-değişken oluşturur. Ama bunu nerede kullanacağınızı siz kararlaştırabilirsiniz.
Bir dizi-değişkenin herhangi bir elemanın değerini, programın herhangi bir aşamasında değiştirebilirsiniz:
Ogrenciler(3,2) = “Caner”
komutu, Hande’nin adını siler ve yerine Caner’in adını yazar.
Dizi-değişkenlerimizin eleman sayısını bilmek isteyebiliriz. Kimi zaman dizi-değişkenlerimizin eleman sayısı biz belirlemeyiz; bu bilgi bir formdan gelebilir; bir veritabanından alınabilir; fakat mesela bir döngü için bu değişkenin kaç elemanı olduğunu bilmek gerekir. Örneğin elimizde 35 elemanı olan Ogrenciler dizi-değişkeni varsa, bu sayıyı
ElemanSayisi = UBound(Ogrenciler)
komutu ile ElemanSayisi değişkenine yazdırırız. ElemanSayisi’nin değeri bu durumda 35 olacaktır.
Test Fonksiyonları
VBScript’te kullandığımız bazı değişkenlerin o andaki durumu, programımızın akışını kontrolde kullanacağımız bilgiyi sağlayabilir. Sözgelimi bir değişkenin değeri boş ise, ziyaretçimizin formu tam olarak doldurmadığını düşünebiliriz. VBScript, bize değişkenlerin durumunu sınamamız için bazı özel fonksiyonlar sağlar. Bu özel fonksiyonlardan dönen değer True (doğru) veya False (yanlış) olur; doğru sonucun değeri –1, yanlış sonucun değeri ise 0’dır:
IsArray Bir değişkenin dizi-değişken (Array) olup olmadığını sınar.
IsDate Bir değişkenin değerinin tarihe (Date) çevrilip çevrilemeyeceğini sınar.
IsEmpty Bir değişkenin tanımlanıp değer atanmış olup olmadığını sınar.
IsNull Bir değişkenin geçerli bir değer tutup tutmadığını sınar.
IsNumeric Bir değişkenin sayı olarak işleme tabi tutup tutulamayacağını sınar
IsObject Bir ifadenin geçerli bir ActiveX veya OLE nesnesine referansta bulunup bulunmadığını sınar.
TypeName Bir değişkenin türünü belirtir.
VarType Bir değişkenin türünü belirten sayıyı verir.
***
Şimdi ASP için gerekli VBScript bilgisi bu kadar değil tabiî. Ama bu, işe başlamamız için yeter. İlerde yeni VBScript komutları, veya fonksiyonları ile karşılaşırsak (ki size garanti ederim, karşılaşacağınızı!) onları orada kısaca ele alırız. Ama yukarıdaki VBScript bilgisi, her zaman lazım! |