3. Programlamanın Temelleri VBSCRIPT
Bir VBScript komut dosyasının olası yürütme bağlamlarını açıkladıktan sonra, şimdi dilin kendisine geçiyoruz. Bundan sonraki bölümlerde şu koşulları ele alacağız:
- komut dosyasının barındırıldığı ortam WSH'tir
- komut dosyası, uzantısı .vbs olan bir dosyada yer almaktadır
Bir kavramı tanıtmak için genellikle şu şekilde ilerliyoruz:
- gerekirse kavramı tanıtıyoruz
- kavramı örnekleyen bir program ve sonuçlarını sunuyoruz
- gerekirse sonuçlar ve program hakkında yorum yaparız
VBScript nesneleri, komut dosyası metninde kullanılan "büyük/küçük harf" ayrımına duyarlı değildir. Dolayısıyla, wscript.echo "coucou" ya da WSCRIPT.ECHO "coucou" yazmak arasında bir fark yoktur.
Aşağıda sunulan programlar ekrana çok sayıda çıktı yazdırdığı için, wscript nesnesinin yazdırma yöntemlerini tekrar ele alacağız.
3.1. Bilgi görüntüleme
echo nesnesinin wscript yöntemini daha önce kullanmıştık, ancak bu nesnenin ekrana yazım yapmayı sağlayan başka yöntemleri de vardır; bunu aşağıdaki komut dosyası göstermektedir:
Program | Sonuçlar |
![]() |
Aşağıdaki noktalara dikkat edilmelidir:
- Apostrofdan sonra yer alan tüm metinler, betiğin yorumu olarak kabul edilir ve WSH tarafından yorumlanmaz (1. satır).
- echo yöntemi, argümanlarını yazar ve bir sonraki satıra geçer; writeLine yöntemi de aynı şekilde davranır (2. ve 6. satırlar)
- write yöntemi, argümanlarını yazar ve bir sonraki satıra geçmez (satır 3)
- Satır sonu işareti, ASCII kodlu 13 ve 10 karakterlerinin dizisiyle temsil edilir. Dolayısıyla 4. satır, chr(13) & chr(10) ifadesiyle temsil edilir; burada chr(i), i numaralı kod karakteri ve & ise dize birleştirme operatörüdür. Dolayısıyla "chat" & "eau", "chateau" dizesini oluşturur.
- Satır sonu işareti, vbCRLF sabiti ile daha kolay gösterilebilir (5. satır)
3.2. 'de VBScript komutlarının yazımı
Varsayılan olarak, her satıra bir komut yazılır. Bununla birlikte, inst1:inst2:inst3 örneğinde olduğu gibi, karakteriyle ayırarak her satıra birden fazla komut yazılabilir. Bir satır çok uzunsa, parçalara bölünebilir. Bu durumda, komutun farklı bölümlerinin her biri (boşluk)_ karakterleriyle sonlandırılması gerekir. Önceki örneği ele alalım ve komutları farklı şekilde yeniden yazalım:
Program | Sonuçlar |
![]() |
3.3. msgBox işleviyle yazma
Bu belgede ekrana yazmak için neredeyse yalnızca wscript nesnesini kullanıyor olsak da, bu sefer bir pencerede bilgi görüntülemek için daha gelişmiş bir işlev mevcuttur. Bu, genellikle üç parametreyle kullanılan msgbox işlevidir:
msgbox mesaj, simgeler+düğmeler, başlık
- message, görüntülenecek mesajın metnidir
- simgeler+düğmeler (isteğe bağlı), aslında mesaj penceresine yerleştirilecek simge ve düğme türlerini belirten bir sayıdır. Bu sayı çoğunlukla iki sayının toplamıdır: ilki simgeyi, ikincisi ise düğmeleri belirler
- başlık, mesaj penceresinin başlık çubuğuna yerleştirilecek metindir
Görüntüleme penceresindeki simgeyi ve düğmeleri belirlemek için kullanılacak değerler şunlardır:
Sabit | Değer | Açıklama |
vbOKOnly | 0 | Yalnızca OK düğmesini görüntüler. |
vbOKCancel | 1 | OK ve İptal düğmelerini görüntüler. |
vbAbortRetryIgnore | 2 | "Vazgeç", "Tekrar Dene" ve "Atla" düğmelerini görüntüler. |
vbYesNoCancel | 3 | "Evet", "Hayır" ve "İptal" düğmelerini görüntüler. |
vbYesNo | 4 | "Evet" ve "Hayır" düğmelerini görüntüler. |
vbRetryCancel | 5 | "Tekrar Dene" ve "İptal" düğmelerini görüntüler. |
vbCritical | 16 | "Kritik Mesaj" simgesini görüntüler. |
vbQuestion | 32 | Uyarı İsteği simgesini görüntüler. |
vbExclamation | 48 | Uyarı Mesajı simgesini görüntüler. |
vbInformation | 64 | Bilgi mesajı simgesini görüntüler. |
vbDefaultButton1 | 0 | İlk düğme varsayılan düğmedir. |
vbDefaultButton2 | 256 | İkinci düğme varsayılan düğmedir. |
vbDefaultButton3 | 512 | Üçüncü düğme varsayılan düğmedir. |
vbDefaultButton4 | 768 | Dördüncü düğme varsayılan düğmedir. |
vbApplicationModal | 0 | Modal uygulama; kullanıcı, mevcut uygulamada çalışmaya devam etmeden önce mesaja yanıt vermelidir. |
vbSystemModal | 4096 | Modal sistem; kullanıcı mesaja yanıt verene kadar tüm uygulamalar askıya alınır. |
İşte bazı örnekler:
Program | ||||||||||||||||||
![]() | ||||||||||||||||||
Sonuçlar | ||||||||||||||||||
| ||||||||||||||||||
Bazı durumlarda, aynı zamanda bir giriş penceresi olan bir bilgi penceresi görüntülenir. Bir soru sorulduğunda, örneğin kullanıcının oui düğmesine mi yoksa non düğmesine mi tıkladığını bilmek istenir. msgBox işlevi, önceki programda kullanmadığımız bir sonuç döndürür. Bu sonuç, kullanıcının görüntüleme penceresini kapatmak için kullandığı düğmeyi temsil eden bir tamsayıdır:
Sabit | Değer | Seçilen düğme |
vbOK | 1 | OK |
vbCancel | 2 | İptal |
vbAbort | 3 | Vazgeç |
vbRetry | 4 | Tekrar dene |
vbIgnore | 5 | Atla |
vbYes | 6 | Evet |
vbNo | 7 | Hayır |
Aşağıdaki program, msgBox işlevinin sonucunun nasıl kullanıldığını gösterir. "Evet", "Hayır" ve "İptal" düğmelerinin bulunduğu bir pencere 4 kez görüntülenir. Şu şekilde yanıt verilir:
- "Evet"e tıklanır
- "Hayır"a tıklanır
- "İptal"e tıklayın
- hiçbir düğmeyi kullanmadan pencereyi kapatın. Program, bunun "İptal" düğmesini kullanmakla aynı sonuç verdiğini gösterir.
Program | ||||
![]() | ||||
Sonuçlar | ||||
|
3.4. , VBScript'te kullanılabilir veriler
VBscript yalnızca bir veri türü tanır: variant. Bir variant'ın değeri bir sayı (4, 10,2), bir karakter dizisi ("merhaba"), bir boole değeri (true/false), bir tarih (#01/01/2002#), bir nesnenin adresi veya "dizi" adı verilen bir yapıya yerleştirilmiş tüm bu verilerin bir kümesi olabilir.
Aşağıdaki programı ve sonuçlarını inceleyelim:
Program | Sonuçlar |
![]() |
Açıklamalar:
- Bazı programlama dillerinde (C, C++, Pascal, Java, C#, ...) bir değişkenin kullanılmadan önce bildirilmesi gerekir. Bu bildirim, değişkenin adını ve içerebileceği veri türünü (tamsayı, gerçek sayı, dize, tarih, boole, ...) belirtmekten ibarettir. Değişkenlerin bildirilmesi çeşitli avantajlar sağlar:
- farklı veri türleri farklı bellek alanları gerektiriyorsa, değişken için gerekli bellek alanını bilmek
- programın tutarlılığını kontrol etmek. Dolayısıyla, i bir tamsayı ve c bir karakter dizisiyse, i ile c'i çarpmak hiçbir anlam ifade etmez. i ve c değişkenlerinin türleri programcı tarafından bildirilmişse, programın çalıştırılmasından önce onu analiz eden program bu tür bir tutarsızlığı bildirebilir.
Tek veri türü olan çoğu betik dilinde (Perl, Python, Javascript, ...) olduğu gibi, VBScript de değişkenlerin bildirilmemesine izin verir. Yukarıdaki örnekte de bu yapılmıştır.
- Farklı verilerin sözdizimini inceleyelim
- 10,2'nin 10. satırda (virgül yerine ondalık nokta kullanılarak) yazıldığına dikkat edelim. Ekranda 10,2 olarak görüntülendiği görülür.
- 1.4e-2, 13. satırda (bilimsel gösterim). Ekranda 0,014 sayısı görüntülenmiştir
- [#01/10/2002#] (26. satır), 10 Ocak 2002 tarihini temsil etmek için kullanılır. Dolayısıyla, VBScript'in tarihi temsil etmek için kullandığı biçim #mm/jj/aaaa#'dır. jj, mm ayına ve aaaa yılına aittir.
- 31. ve 34. satırlardaki true ve false (doğru/yanlış) boole değerleri. Bu iki değer, 32. ve 35. satırlarda gösterildiği gibi sırasıyla -1 ve 0 tamsayılarıyla temsil edilir. Bir boole değeri bir karakter dizisiyle birleştirildiğinde, bu değerler sırasıyla 33. ve 36. satırlarda gösterildiği gibi "Vrai" ve "Faux" dizilerine dönüşür. Bu arada, birleştirme operatörü &'nin dizilerden başka şeyleri birleştirmek için de kullanılabileceğine dikkat edilmelidir.
- v değişkenine bir tür atanmamışsa, zaman içinde sırayla farklı türlerdeki değerleri barındırabilir.
3.5. 'in variant türünün alt türleri
Bir variant'ın içerebileceği farklı veri türleri hakkında resmi belgelerde şunlar belirtilmiştir:
Sadece sayı/dize ayrımının ötesinde, bir Variant farklı sayısal bilgi türlerini ayırt edebilir. Örneğin, bazı sayısal bilgiler bir tarihi veya saati temsil eder. Bu bilgiler diğer tarih veya saat verileriyle birlikte kullanıldığında, sonuç her zaman bir tarih veya saat biçiminde ifade edilir. Ayrıca, boole değerlerinden büyük kayan noktalı sayılara kadar başka sayısal bilgi türleri de mevcuttur. Bir Variant'ta bulunabilen bu farklı bilgi kategorileri, alt türlerdir. Çoğu durumda, verilerinizi basitçe bir Variant'a yerleştirirsiniz ve Variant, bu verilere göre en uygun şekilde davranır.
Aşağıdaki tablo, bir Variant'ta bulunabilecek farklı alt türleri göstermektedir.
Alt tür | Açıklama |
Boş | Variant başlatılmamıştır. Değeri, sayısal değişkenler için sıfıra, dize değişkenleri için ise sıfır uzunlukta bir dizeye ("") eşittir. |
Null | Variant, kasıtlı olarak hatalı veriler içerir. |
Boolean | |
Byte | 0 ile 255 arasında bir tamsayı içerir. |
Integer | -32.768 ile 32.767 arasında bir tamsayı içerir. |
Para Birimi | -922 337 203 685 477,5808 ile 922 337 203 685 477,5807 arasında bir değer içerir. |
Long | -2 147 483 648 ile 2 147 483 647 arasındaki bir tamsayı içerir. |
Tek | Negatif değerler için -3,402823E38 ile -1,401298E-45 arasında tek hassasiyetli bir kayan nokta sayısını içerir; 1,401298E-45 ile 3,402823E38 arasında değişen tek basamaklı kesirli bir sayı içerir. |
Çift | Negatif değerler için -1,79769313486232E308 ile -4,94065645841247E-324 arasında çift hassasiyetli bir kayan nokta sayısını içerir; 4,94065645841247E-324 ile 1,79769313486232E308 arasında değişen pozitif değerler için. |
Tarih (Saat) | 1 Ocak 100 ile 31 Aralık 9999 arasındaki bir tarihi temsil eden bir sayı içerir. |
Dize | Yaklaşık 2 milyar karakterle sınırlı, değişken uzunlukta bir dize içerir. |
Nesne | Bir nesne içerir. |
Hata | Bir hata numarası içerir. |
3.6. C Bir varyantta bulunan verinin tam türünü belirlemek
Variant türündeki bir değişken, çeşitli türlerdeki verileri içerebilir. Bazen bu verilerin tam olarak ne tür olduğunu bilmemiz gerekir. Bir programda produit=nombre1*nombre2 yazarsak, nombre1 ve nombre2’in iki sayısal veri olduğunu varsayarız. Ancak bazen bundan emin olamayız, çünkü bu değerler klavyeden girilmiş olabilir, bir dosyadan alınmış olabilir ya da herhangi bir dış kaynaktan gelmiş olabilir. Bu durumda, nombre1 ve nombre2 değişkenlerine yerleştirilen verilerin türünü kontrol etmemiz gerekir. typename(var) işlevi, var değişkeninde bulunan verilerin türünü öğrenmemizi sağlar. İşte bazı örnekler:
Program | Sonuçlar |
![]() |
Bir başka olası işlev ise, vartype(var)'tir; bu işlev, var değişkeninde bulunan verinin türünü temsil eden bir sayı döndürür:
Sabit | Değer | Açıklama |
vbEmpty | 0 | Boş (başlatılmamış) |
vbNull | 1 | Null (geçerli veri yok) |
vbInteger | 2 | Tamsayı |
vbLong | 3 | Uzun tamsayı |
vbSingle | 4 | Tek hassasiyetli kayan nokta sayı |
vbDouble | 5 | Çift hassasiyetli kayan noktalı sayı |
vbCurrency | 6 | Para birimi |
vbDate | 7 | Tarih |
vbString | 8 | Kanal |
vbObject | 9 | Otomasyon Nesnesi |
vbError | 10 | Hata |
vbBoolean | 11 | Boole |
vbVariant | 12 | Varyant (yalnızca Varyant tablolarıyla kullanılır) |
vbDataObject | 13 | Otomasyon dışı nesne |
vbByte | 17 | Bayt |
vbArray | 8192 | Tablo |
Not: Bu sabitler VBScript tarafından tanımlanmıştır. Dolayısıyla, kodunuzun herhangi bir yerinde gerçek değerlerin yerine bu isimler kullanılabilir.
Yukarıdaki bilgiler VBscript belgelerinden alınmıştır. Bu bilgiler bazen hatalı olabilir; muhtemelen VB belgelerinden kopyala-yapıştır işlemiyle aktarılmıştır. VBScript'in vartype işlevi, yukarıda belirtilenlerin sadece bir kısmını gerçekleştirir.
vartype için yeniden yazılan önceki program şu sonuçları vermektedir:
Program | Sonuçlar |
![]() |
3.7. D kript tarafından kullanılan değişkenleri bildirmek
Komut dosyası tarafından kullanılan değişkenleri tanımlamanın zorunlu olmadığını belirtmiştik. Bu durumda, şunu yazarsak:
1) somme=4
...
2) somme=smme+10
- komutta “somme” yerine “smme” gibi bir yazım hatası olsa bile, VBScript herhangi bir hata bildirmez. VBScript, “smme” ifadesini yeni bir değişken olarak kabul eder. Bu değişkeni oluşturur ve 2. komut bağlamında onu 0 olarak başlatarak kullanır.
Bu tür hataları bulmak oldukça zor olabilir. Bu nedenle, komut dosyasının başına “option explicit” yönergesi ekleyerek değişkenlerin bildirilmesini zorunlu kılmak tavsiye edilir. Ardından, her değişken ilk kullanımından önce bir “dim” komutuyla bildirilmelidir:
option explicit
...
dim somme
1) somme=4
...
2) somme=smme+10
Bu örnekte, vbscript, aşağıdaki örnekte gösterildiği gibi 2) numaralı satırda tanımlanmamış bir smme değişkeni olduğunu bildirecektir:
Program | Sonuçlar |
![]() |
Belgedeki kısa örneklerde değişkenler çoğu zaman tanımlanmamış olsa da, ilk anlamlı komut dosyalarını yazmaya başladığımızda bunların tanımlanmasını zorunlu kılacağız. Bu durumda Option explicit yönergesi sistematik olarak kullanılacaktır.
3.8. 'in dönüştürme işlevleri
VBScript, bağlamına göre varyantlardaki verileri dizelere, sayılara, boole değerlerine vb. dönüştürür. Çoğu zaman bu işlem sorunsuz gerçekleşir, ancak daha sonra göreceğimiz gibi bazen beklenmedik sonuçlar ortaya çıkabilir. Bu durumda, varyantın veri türünü "zorlamak" isteyebiliriz. VBscript, bir ifadeyi çeşitli veri türlerine dönüştüren dönüştürme işlevlerine sahiptir. İşte bunlardan bazıları:
Cint (ifade) | ifadeyi kısa tamsayıya (integer) dönüştürür |
Clng (ifade) | ifadeyi uzun tamsayıya (long) dönüştürür |
Cdbl (ifade) | ifadeyi çift hassasiyetli (double) sayıya dönüştürür |
Csng (ifade) | ifadeyi tek hassaslıkta (single) sayıya dönüştürür |
Ccur (ifade) | ifadeyi para birimi verisine (currency) dönüştürür |
İşte birkaç örnek:
3.9. , klavyeden girilen verileri alır
wscript nesnesi, bir komut dosyasının klavyeden girilen verileri almasını sağlar. wscript.stdin.readLine yöntemi, klavyeden girilen ve "Enter" tuşuyla onaylanan bir metin satırını okumaya yarar. Okunan bu satır bir değişkene atanabilir.
Program | Sonuçlar |
![]() | |
Yorumlar:
- Sonuçlar sütununda ve [Tapez votre nom : st] satırında, st kullanıcı tarafından girilen satırdır.
Klavyeyle girilen metin bir sayı olsa bile, aşağıdaki örnekte gösterildiği gibi öncelikle bir karakter dizisi olarak kabul edilir:
Program | Sonuçlar |
![]() |
Bu sayı bir aritmetik işlemde kullanılırsa, VBscript dizgiyi otomatik olarak sayıya dönüştürür, ancak bu her zaman böyle olmaz. Aşağıdaki örneği inceleyelim:
Program | Sonuçlar |
![]() |
Sonuçlarda, komut dosyasının 8. satırının beklendiği gibi çalışmadığını görüyoruz; bunun nedeni (maalesef) VBScript'te + operatörünün iki anlamı olmasıdır: iki sayının toplanması veya iki dizgenin birleştirilmesi (iki dizge birbirine eklenir). Daha önce, klavyeden girilen sayıların karakter dizileri olarak okunduğunu ve VBScript'in bunları gerektiğinde sayılara dönüştürdüğünü görmüştük. VBScript, yalnızca sayıları içeren - , * ve / işlemleri için bunu doğru bir şekilde yaptı, ancak dizileri de içerebilen + operatörü için aynı şeyi yapmadı. Burada, dizgi birleştirme işlemi yapmak istediğimizi varsaymıştır.
Bu soruna basit bir çözüm, dizeleri okunduğu anda sayılara dönüştürmektir; bunu, önceki programın aşağıdaki şekilde iyileştirilmiş hali göstermektedir:
Program | Sonuçlar |
![]() |
3.10. S inputbox işleviyle veri girişi
Klavye yerine bir grafik arayüz üzerinden veri girmek isteyebilirsiniz. Bu durumda inputBox işlevi kullanılır. Bu işlev birçok parametre kabul eder, ancak bunlardan yalnızca ilk ikisi sıklıkla kullanılır:
reponse=inputBox(message,title)
- mesaj: kullanıcıya sorduğunuz soru
- başlık (isteğe bağlı): giriş penceresine verdiğiniz başlık
- yanıt: kullanıcı tarafından girilen metin. Kullanıcı yanıt vermeden pencereyi kapattıysa, yanıt boş bir dizedir.
Aşağıda, bir kişinin adını ve yaşını soran bir örnek verilmiştir. Ad için bir bilgi girip OK komutunu veriyoruz. Yaş için de bir bilgi girip İptal komutunu veriyoruz.
Program | ||||
![]() | ||||
Sonuçlar | ||||
|
3.11. , yapılandırılmış nesneleri kullanma
VBScript ile yöntemleri ve özellikleri olan nesneler oluşturulabilir. İşleri karmaşıklaştırmamak için burada, yöntemleri olmayan ancak özellikleri olan bir nesneyi ele alacağız. Bir kişiyi düşünelim. Bu kişiyi tanımlayan birçok özelliği vardır: boy, kilo, ten rengi, göz rengi, saç rengi... Bunlardan sadece ikisini ele alacağız: adı ve yaşı. Nesneleri kullanabilmek için önce bunları oluşturmamızı sağlayacak kalıbı oluşturmamız gerekir. Bu, VBScript’te bir sınıf kullanılarak yapılır. personne sınıfı şu şekilde tanımlanabilir:
class personne
Dim nom,age
End class
[Dim nom,age] komutu, personne sınıfının iki özelliğini tanımlar. personne sınıfının örneklerini (bunlara "örnekler" denir) oluşturmak için şunu yazarız:
Neden şöyle yazmıyoruz:
Çünkü bir varyant bir nesneyi içerebilir. Yalnızca nesnenin adresini içerebilir. set personne1=new personne yazıldığında, aşağıdaki olay dizisi gerçekleşir:
- personne adlı bir nesne oluşturulur. Bu, nesneye bellek ayrıldığı anlamına gelir.
- Bu personne nesnesinin adresi, personne1 değişkenine atanır
Böylece, personne1 ve personne2 değişkenleri için aşağıdaki bellek şeması ortaya çıkar:
![]() |
Dilbilimsel bir yanlışlık olsa da, personne1'in bir personne nesnesi olduğunu söyleyebiliriz. personne1'in aslında personne nesnesinin adresi olduğunu ve personne nesnesinin kendisi olmadığını hatırlarsak, bu dil kullanımındaki bu esnekliği kabul edebiliriz.
Bir personne nesnesinin nom ve age olmak üzere iki özelliğe sahip olduğunu söylemiştik. Bu özellikleri nasıl kullanabiliriz? Biraz yukarıda açıklandığı gibi objet.propriété notasyonu ile. Dolayısıyla
personne1.nom, 1 numaralı kişinin adını, personne1.age ise yaşını ifade eder. İşte bunu gösteren kısa bir program:
Program | Sonuçlar |
![]() |
Yukarıdaki program şu şekilde değiştirilebilir:
Program | Sonuçlar |
![]() |
Burada, ifadelerde nesne adlarını "faktörlere ayırmaya" olanak tanıyan with ... end with yapısını kullandık. 9. satırdaki-12 ve 15-18 satırlarında yer alan "with p1 ... end with" yapısı, daha sonra .nom sözdizimini p1.nom yerine ve .age sözdizimini p1.age yerine kullanmamızı sağlar. Bu, aynı nesne adının tekrar tekrar kullanıldığı komutların yazımını kolaylaştırır.
3.12. Bir değişkene değer atama
Bir değişkene değer atamak için iki komut vardır:
- değişken=ifade
- set değişken=ifade
Biçim 2, sonucu bir nesne referansı olan ifadeler için ayrılmıştır. Diğer tüm ifade türleri için biçim 1 kullanılır. İki biçim arasındaki fark şudur:
- variable=expression komutunda, değişken bir değer alır. v1 ve v2 iki değişken ise, v1=v2 yazmak v1'in değerini v2'ye atar. Böylece bir değer iki farklı yerde kopyalanmış olur. Daha sonra v2'nin değeri değiştirilse bile, v1'in değeri hiç değişmez.
![]() |
- "set variable=expression" komutunda, değişken bir nesnenin adresini değer olarak alır. v1 ve v2 iki değişken ise ve v2, obj2 nesnesinin adresiyse, "set v1=v2" yazmak v1'in değerini v2'ye, yani obj2 nesnesinin adresine atar. Komut dosyası daha sonra v1 ve v2 ile işlem yaptığında, işlenen v1 ve v2'nin "değerleri" değil, v1 ve v2 tarafından "işaret edilen" nesnelerdir; yani burada aynı nesne. v1 ve v2'nin aynı nesneye iki referans olduğu söylenir ve bu nesneyi v1 veya v2 aracılığıyla işlemek arasında hiçbir fark yoktur. Başka bir deyişle, v2 tarafından işaret edilen nesneyi değiştirmek, v1 tarafından işaret edilen nesneyi de değiştirir.
![]() |
İşte bir örnek:
Program | Sonuçlar |
![]() |
3.13. İfadeleri de ğerlendirmek
İfadeleri değerlendirmek için kullanılan başlıca operatörler şunlardır:
İşlemci türü | İşlemciler | Örnek |
Aritmetik | +,-,*,/ | |
mod | ||
\ | ||
^ | ||
Karşılaştırma | <,<= >, >= =,<> | a<>b, a'nın b'den farklı olması durumunda doğrudur a=b, a b'ye eşitse doğrudur a ve b, ikisi de sayı ya da ikisi de karakter dizisi olabilir. İkinci durumda, chaine1<chaine2, chaine1'in alfabetik sırayla chaine2'den önce gelmesi durumunda geçerlidir. Karakter dizisi karşılaştırmalarında, büyük harfler alfabetik sırayla küçük harflerden önce gelir. |
is | ||
Mantık | and, or, not, xor | Buradaki tüm işlenciler boole değerleridir. bool1 or bool2, bool1 veya bool2 doğruysa doğrudur bool1 and bool2, hem bool1 hem de bool2 doğruysa doğrudur not bool1, bool1 yanlışsa doğrudur ve bunun tersi de geçerlidir bool1 xor bool2, bool1 ve bool2 boole değerlerinden yalnızca biri doğruysa doğrudur |
Birleştirme | &, + | İki dizgiyi birleştirmek için + operatörünün kullanılması, iki sayının toplanmasıyla karışıklığa yol açabileceğinden tavsiye edilmez. Bu nedenle, yalnızca & operatörü kullanılmalıdır. |
3.14. C : Programın yürütülmesini kontrol etme
3.14.1. E koşullu eylemleri yürütmek
Bir koşulun doğru/yanlış değerine göre eylemler gerçekleştirmeye olanak tanıyan VBScript komutu şöyledir:
| Öncelikle expression ifadesi değerlendirilir. Bu ifadenin bir Boole değeri olmalıdır. Değeri "doğru" ise, then'teki eylemler yürütülür; aksi takdirde, varsa else'teki eylemler yürütülür. |
Aşağıda, if-then-else yapısının farklı varyantlarını gösteren bir program yer almaktadır:
Program | Sonuçlar |
![]() |
Açıklamalar:
- VBScript'te, her satıra bir komut yazmak yerine instruction1:instruction2:... : instructionn şeklinde yazılabilir. Örneğin 10. satırda bu özellik kullanılmıştır.
3.14.2. ylemleri tekrar tekrar yürütmek
Tekrar sayısı bilinen döngü |
exit for komutuyla bir for döngüsünden istediğiniz zaman çıkabilirsiniz. |
Tekrar sayısı bilinmeyen döngü |
exit do komutuyla bir do while döngüsünden her an çıkılabilir. |
Aşağıdaki program bu noktaları göstermektedir:
Program |
![]() |
Sonuçlar |
Not: Bir programın geliştirme aşamasında, programın "döngüye girmesi", c.a.d, yani hiç durmaması sık rastlanan bir durumdur. Genellikle program, çıkış koşulu doğrulanamayan bir döngü yürütür; örneğin aşağıdaki örnekte olduğu gibi:
' sonsuz döngü
i=0
Do While 1=1
i=i+1
wscript.echo i
Loop
' aynı türden bir başka örnek
i=0
Do While true
i=i+1
wscript.echo i
Loop
Yukarıdaki programı çalıştırırsak, ilk döngü kendi kendine asla durmayacaktır. Klavyeden CTRL-C yazarak (CTRL tuşu ve C tuşuna aynı anda basarak) durmasını zorlayabiliriz.
3.14.3. Programın çalışmasını sonlandırma
wscript.quit n komutu, n değerine eşit bir hata kodu döndürerek programın çalışmasını sonlandırır. DOS komutunda, bu hata kodu if ERRORLEVEL n komutuyla test edilebilir; bu komut, en son çalıştırılan program tarafından döndürülen hata kodu >=n ise doğru değerini verir. Aşağıdaki programı ve sonuçlarını ele alalım:
![]() |
Programın çalıştırılmasından hemen sonra, aşağıdaki üç DOS komutu verilir:
DOS 1 komutu, program tarafından döndürülen hata kodunun >=5 olup olmadığını test eder. Eğer öyleyse, 5 değerini görüntüler (echo), aksi takdirde hiçbir şey yapmaz.
DOS 3 komutu, program tarafından döndürülen hata kodunun >=4 olup olmadığını kontrol eder. Eğer öyleyse, 4 değerini görüntüler (echo), aksi takdirde hiçbir şey yapmaz.
DOS 5 komutu, program tarafından döndürülen hata kodunun >=3 olup olmadığını kontrol eder. Eğer öyleyse, 3'ü görüntüler; aksi takdirde hiçbir şey yapmaz.
Görüntülenen sonuçlardan, program tarafından döndürülen hata kodunun 4 olduğu sonucuna varılabilir.
3.15. : Bir varyanttaki veri tabloları
Bir T varyantı bir değerler listesi içerebilir. Bu durumda buna dizi denir. Bir T dizisi çeşitli özelliklere sahiptir:
- T dizisinin i elemanına, T(i) sözdizimi ile erişilir; burada i, T dizisinin n elemanı varsa 0 ile n-1 arasında değişen ve “indeks” olarak adlandırılan bir tamsayıdır.
- T dizisinin son elemanının indeksi ubound(T) ifadesiyle bulunabilir. T dizisinin eleman sayısı ise ubound(T)+1'dir. Bu sayıya genellikle dizinin boyutu denir.
- Bir T değişkeni, T=array() sözdizimi ile boş bir dizi olarak veya T=array(eleman0, eleman1, ...., elemann) sözdizimi ile bir eleman dizisi olarak başlatılabilir.
- Önceden oluşturulmuş bir T dizisine elemanlar eklenebilir. Bunun için redim preserve T(N) komutu kullanılır; burada N, T dizisinin son elemanının yeni indeksidir. Bu işleme yeniden boyutlandırma (redim) denir. preserve anahtar sözcüğü, bu yeniden boyutlandırma sırasında dizinin mevcut içeriğinin korunması gerektiğini belirtir. Bu anahtar kelime kullanılmadığında, T yeniden boyutlandırılır ve elemanları silinir.
- T dizisinin bir elemanı T(i), variant türündedir ve bu nedenle herhangi bir değeri, özellikle de bir diziyi içerebilir. Bu durumda, T(i)(j) notasyonu, T(i) dizisinin j'inci elemanını belirtir.
Dizilerin bu çeşitli özellikleri aşağıdaki programla gösterilmiştir:
Program | Sonuçlar |
![]() |
Yorumlar
- Burada, biraz ileride ayrıntılı olarak açıklanan "join" adlı bir işlev kullanılmıştır.
3.16. 'deki dizi değişkenleri
VBScript'te bir diziyi kullanmanın başka bir yolu da dizi değişkeni kullanmaktır. Bu tür bir değişken, skaler değişkenlerin aksine, zorunlu olarak bir dim komutuyla tanımlanmalıdır. Çeşitli tanımlamalar mümkündür:
- dim tablo(n), 0'dan n'ye kadar numaralandırılmış n+1 elemanlı statik bir dizi bildirir. Bu tür bir dizinin boyutu değiştirilemez
- dim tablo(), boş bir dinamik dizi bildirir. Bu dizinin, bir dizi içeren bir variantta olduğu gibi, redim komutuyla yeniden boyutlandırılması gerekir
- dim dizi(n,m), (n+1)*(m+1) elemanlı 2 boyutlu bir dizi tanımlar. Dizinin (i,j) elemanı tableau(i,j) olarak gösterilir. Aynı elemanın bir variantta tableau(i)(j) olarak gösterileceğiyle arasındaki farka dikkat edilmelidir.
Neden birbirine çok benzeyen iki tür dizi var? VBScript belgelerinde bu konuya değinilmiyor ve hangisinin diğerinden daha verimli olduğu da belirtilmiyor. Bundan sonra, örneklerimizde neredeyse tamamen varyant içindeki diziyi kullanacağız. Ancak, VBscript'in, türlenmiş veriler (integer, double, boolean, ...) içeren Visual Basic dilinden türediğini hatırlamalıyız. Bu durumda, örneğin gerçek sayı dizisi kullanmamız gerekiyorsa, dizi değişkeni variant değişkeninden daha yüksek performans gösterecektir. Bu durumda, gerçek sayı dizisi tanımlamak için dim tableau(1000) as double gibi bir ifade kullanılır; dizi dinamik ise, sadece dim tableau() as double şeklinde tanımlanır.
Aşağıda, dizi değişkenlerinin kullanımını gösteren bir örnek yer almaktadır:
Program | Sonuçlar |
![]() |
3.17. 'deki split ve join işlevleri
split ve join işlevleri, bir karakter dizisini bir diziye dönüştürmeye ve tersini yapmaya olanak tanır:
- T bir dizi ve car bir karakter dizisiyse, join(T,car) işlevi, T dizisinin tüm elemanlarının birleştirilmesiyle oluşan ve her bir elemanın bir sonrakinden car karakter dizisiyle ayrıldığı bir karakter dizisidir. Dolayısıyla join(array(1,2,3),"abcd") işlevi "1abcd2abcd3" karakter dizisini verir.
- C, car dizesiyle ayrılmış bir dizi alandan oluşan bir karakter dizisiyse, split(C,car) işlevi, C dizesinin farklı karakterlerini elemanları olarak içeren bir dizi döndürür. Dolayısıyla split("1abcd2abcd3", "abcd") işlevi (1,2,3) dizisini döndürür.
İşte bir örnek:
Program | Sonuçlar |
|
3.18. Diziler
T dizisinin bir elemanına, o elemanın i numarası bilindiğinde erişilebilir. Bu durumda, T(i) notasyonu ile erişilebilir. Elemanlarına numara ile değil, bir karakter dizisiyle erişilen diziler de vardır. Bu tür dizilerin tipik örneği sözlüktür. "Larousse" veya "Le petit Robert" sözlüklerinde bir kelimenin anlamını ararken, o kelimeye kelime üzerinden erişilir. Bu sözlüğü 2 sütunlu bir dizi ile gösterebiliriz:
kelime1 | açıklama1 |
kelime2 | açıklama2 |
kelime3 | açıklama3 |
.... |
Böylece şunun gibi şeyler yazabiliriz:
sözlük("kelime1")="açıklama1"
sözlük("kelime2")="açıklama2"
...
Bu durumda, dizinin işleyişine çok yakındır; tek fark, dizinin indekslerinin tamsayılar değil, karakter dizileri olmasıdır. Bu tür bir diziye sözlük (veya ilişkisel dizi, hash tablosu) denir ve karakter dizisi indekslerine sözlüğün anahtarları (keys) denir. Sözlüklerin kullanımı bilgisayar dünyasında son derece yaygındır. Hepimizin üzerinde bir numara bulunan bir sosyal güvenlik kartı vardır. Bu numara bizi benzersiz bir şekilde tanımlar ve hakkımızdaki bilgilere erişim sağlar. "sözlük("anahtar")="bilgiler" modelinde, "anahtar" burada sosyal güvenlik numarası, "bilgiler" ise sosyal güvenlik kurumunun bilgisayarlarında hakkımızda depolanan tüm bilgiler olur.
Windows'ta, sözlükleri oluşturmaya ve yönetmeye olanak tanıyan "Scripting.Dictionary" adlı bir ActiveX nesnesi mevcuttur. ActiveX nesnesi, ActiveX nesnelerinin kullanım standardına uymak kaydıyla farklı dillerde yazılabilen programlar tarafından kullanılabilen bir arayüz sunan bir yazılım bileşenidir. Dolayısıyla Scripting.dictionary nesnesi, yalnızca VBScript ile değil, Windows’un diğer programlama dilleri olan JavaScript, Perl, Python, C, C++, VB, VBA vb. tarafından da kullanılabilir.
1 | Bir Scripting.Dictionary nesnesi şu komutla oluşturulur set dico=wscript.CreateObject("Scripting.Dictionary") komutuyla veya basitçe set dico=CreateObject("Scripting.Dictionary") CreateObject, WScript nesnesinin bir yöntemidir ve ActiveX nesnelerinin örneklerini oluşturmaya olanak tanır. 2. sürüm, wscript'in örtük bir nesne olabileceğini göstermektedir. Bir yöntem bir nesneye "bağlanamıyorsa", WSH kapsayıcısı bu yöntemi wscript nesnesine bağlamaya çalışır. |
2 | Sözlük oluşturulduktan sonra, add yöntemi ile ona öğeler ekleyebileceğiz: dico.add "anahtar",değer komutu, sözlükte "anahtar" anahtarıyla ilişkili yeni bir giriş oluşturur. İlişkili değer, herhangi bir veri içeren bir variant türüdür. |
3 | Belirli bir anahtara atanan değeri almak için sözlüğün item yöntemini kullanırız: var=dico.item("anahtar") veya set var=dico.item("anahtar") anahtara atanan değer bir nesne ise. |
4 | Sözlüğün tüm anahtarları, keys yöntemi kullanılarak değişken bir dizide alınabilir: anahtarlar=dico.keys anahtarlar, elemanları tek tek incelenebilen bir dizidir. |
5 | Sözlüğün tüm değerleri, items yöntemi kullanılarak bir diziye alınabilir: değerler = sözlük.items items, elemanları tek tek incelenebilen bir dizidir. |
6 | Bir anahtarın varlığı, exists yöntemi ile kontrol edilebilir: dico.exists("anahtar"), "anahtar" adlı anahtar sözlükte mevcutsa doğru değerini verir |
7 | remove yöntemi kullanılarak sözlükten bir giriş (anahtar+değer) silinebilir: dico.remove("anahtar"), "anahtar" anahtarıyla ilişkili girişi sözlükten kaldırır. dico.removeall tüm anahtarları siler, c.a.d ise sözlüğü boşaltır. |
Aşağıdaki program bu çeşitli olanakları kullanır:
Program |
|
Sonuçlar |
|
3.19. Bir diziyi veya sözlüğü sıralama
Bir diziyi veya sözlüğü, değerlerine göre artan veya azalan sıraya göre, ya da sözlük için anahtarlarına göre sıralamak sıkça istenen bir işlemdir. Çoğu programlama dilinde sıralama işlevleri bulunurken, VBScript'te böyle bir işlevin olmadığı görülmektedir. Bu bir eksikliktir.
3.20. Bir programın argümanları
Aşağıdaki örnekte olduğu gibi, bir VBScript programını parametreler ileterek çağırmak mümkündür:
Bu, kullanıcının programa bilgi aktarmasını sağlar. Peki program bu bilgileri nasıl alır? Aşağıdaki programa bir göz atalım:
Program | Sonuçlar |
![]() |
Yorumlar
- WScript.Arguments, komut dosyasına aktarılan argümanların koleksiyonudur
- bir C koleksiyonu,
- count adlı bir özelliğe sahip bir nesnedir; bu özellik, koleksiyondaki öğe sayısını gösterir
- C(i) adlı bir yöntem, koleksiyondaki i numaralı öğeyi verir
3.21. İlk uygulama: IMPOTS
Bir vergi mükellefinin vergisini hesaplamaya yarayan bir program yazmayı hedefliyoruz. Beyan edeceği tek geliri maaşı olan bir vergi mükellefinin basitleştirilmiş durumunu ele alalım:
- çalışanın pay sayısını nbParts=nbEnfants/2 +1 olarak hesaplayalım (eğer bekarsa), evliyse nbEnfants/2+2 olarak hesaplanır; burada nbEnfants, çocuk sayısıdır.
- Vergiye tabi geliri R=0,72*S olarak hesaplanır; burada S, yıllık maaşıdır
- aile katsayısı Q = R/N olarak hesaplanır
Aşağıdaki verilere göre vergi tutarı I hesaplanır
12620,0 | 0 | 0 |
13.190 | 0,05 | 631 |
15640 | 0,1 | 1290,5 |
24.740 | 0,15 | 2072,5 |
31810 | 0,2 | 3309,5 |
39.970 | 0,25 | 4900 |
48360 | 0,3 | 6898,5 |
55790 | 0,35 | 9316,5 |
92970 | 0,4 | 12106 |
127.860 | 0,45 | 16754,5 |
151250 | 0,50 | 23147,5 |
172.040 | 0,55 | 30710 |
195.000 | 0,60 | 39312 |
0 | 0,65 | 49.062 |
Her satırda 3 alan bulunur. I vergisini hesaplamak için, QF <= alan1 olan ilk satır aranır. Örneğin, QF = 30000 ise şu satır bulunur:
bulunur. I vergisi bu durumda 0,15*R - 2072,5*nbParts'e eşittir. Eğer QF, QF<=alan1 ilişkisini hiçbir zaman karşılamıyorsa, o zaman son satırdaki katsayılar kullanılır. Burada:
bu da I=0,65*R - 49062*nbParts vergi tutarını verir.
Program şu şekildedir:
Program | ||
| ||
Sonuçlar | ||
|
Yorumlar:
- program, daha önce anlatılanları kullanır (değişkenlerin tanımlanması, argümanlar, tür değişiklikleri, testler, döngüler, bir varyant içindeki dizi)
- verilerin geçerliliğini kontrol etmez; bu, gerçek bir programda olağandışı bir durum olurdu
- Yalnızca while döngüsü bir zorluk teşkil ediyor. Bu döngü, i<ubound(limites) aralığında (c.a.d. Burada i<13) limites dizisinin hangi i indeksi için limites(i)>qf olduğunu belirlemeye çalışır; çünkü limites dizisinin son elemanı anlamlı değildir. Bu, yalnızca i=13 için [Do While i<ubound(limites) And qf>limites(i)] testinin yapılabilmesi amacıyla eklenmiştir. Test, 13<13 ve qf>limites(13) şeklindedir ve bu durumda (VBScript'te) limites(13) değerinin mevcut olması gerekir. While döngüsünden çıkıldığında, hesaplanan son i değeri verginin hesaplanmasına olanak tanır: [impot=int(revenu*coeffr(i)-nbParts*coeffn(i))].









































