Bir Örnek Yapalım

Şimdi ilk ASP sayfamızı yapalım ve bununla kişisel Web Server programının çalışıp çalışmadığını sınayalım. Buraya kadar anlamış olduğunuz gibi ASP sayfası da HTML gibi düz yazı dosyasıdır; dolayısıyla beğendiğiniz bir düz yazı programı ile ASP yazabilirsiniz. Şimdi açın en beğendiğiniz düz yazı programını ve başlayın yazmaya. Eğer kelime-işlemci kolayınıza gidiyorsa, dosyayı ASCII veya ANSI biçiminde kaydetmeyi unutmayın (10'ncu satırın sonunda nokta olduğuna dikkat edin):

 

 

<HTML>

<HEAD>
<TITLE>ASP ILE ILK SAYFA</TITLE>
<META http-equiv="content-type" content="text/html;  
    charset=ISO-8859-9">
<META http-equiv="Content-Type" content="text/html;
    charset=windows-1254">
</HEAD>

<BODY>
  <H1><CENTER>Merhaba Dünya!</H1>
  <H2>Bugün:
  <% Response.Write(Date) %>.
  </CENTER
  </H2>
</BODY>

</HTML>

 Bu dosyayı  merhaba.asp    adıyla kaydedin ve kendi bilgisayarınızda kişisel Web Server'da veya ISS'te sınayacaksanız, bu programları çalıştırın. Browser'ınızın URL hanesine, kişisel Server'ınızın adıyla birlikte dosyanın adını yazın; ve ilk ASP programınız dünyaya Merhaba desin.
.

 

 

Internet'te ASP

ASP teknolojisi ile oluşturduğunuz sayfaları, yani içinde ASP teknolojisinin gerektirdiği kodlar bulunan HTML dosyalarını, .asp uzatmasıyla kaydederiz. Bu dosyalar talep edildiğinde, Web Server programı, eğer ASP teknolojisini tanıyorsa, talep edilenin ASP sayfası olduğunu dosya adının uzatmasından anlar; ve bu sayfayı ziyaretçiye yollamadan önce kendisi işleme tabi tutar. ASP sayfamızdaki kodlar büyük bir ihtimalle bir takım dinamik işler yapacak, örneğin hesaplamalar, araştırmalar, veri tabanından veri çekme, dosya sisteminden dosya isteme gibi görevlerini yerine getirecek, ve ortaya çıkacak olan HTML dosyasını ziyaretçiye gönderecektir. Diyelim ki bu kitapçıktaki örnekleri yaptınız ve ücretsiz Site yeri edinmiş olduğunuz Hosting firmasının bilgisayarındaki sitenize yerleştirdiniz. Sonra Browser'ınızın URL hanesine bu ASP dosyasının adını yazdınız ve sayfayı talep ettiniz. Karşınıza, ya ASP sayfasının içindeki kodları görüntüleyen veya sadece sayfanın HTML unsurlarına yer veren bir sayfa geldi! Bu Server'ınızın ASP anlamadığını gösterir. ASP sayfalarınızı ASP-uyumlu Web sunucularında çalıştırabilirsiniz. Sitenizde ASP sayfaları bulunacaksa ve ücretli evsahibi firmalardan site alanı edinecekseniz, sunucunun ASP-uyumlu olmasına dikkat edin

Şimdi, ilk ASP'mizi çalıştırdığımıza göre, biraz teknikten söz edebiliriz. HTML'in ziyaretçinin bilgisayarında çalıştığını biliyorsunuz; istemci Browser, sizin URL hanesine adını yazdığınız HTML dosyasını yine adresteki sunucu Web Server'dan ister. Web Server da bu dosyayı bulur ve içinde kayıtlı resim ve diğer unsurlarla birlikte istek sahibine gönderir. Fakat kimi zaman Server'a bize sadece bir dosyayı göndermesini değil, fakat bu dosyanın içinde kayıtlı komutlar varsa onları icra etmesini de bildirebiliriz. Bunu yapmanın bir yolu CGI programlarıdır. Bir diğer yolu ise ASP'dir. Web Server, kendisinden bir ASP belgesi talep edildiğinde, kendi kendine "Dur bakalım! ASP istendiği zaman hemen alıp göndermek yok, önce bunu ASP.DLL programına gönderelim.. Ondan sonra işimize devam ederiz!" der.

ASP.DLL, kendisine bir .asp dosyasının geldiğini görünce, hemen ASP'lerin Anayasası olan global.asa'nin çalışıp çalışmadığına bakar. global.asa, tıpkı diğer ASP dosyaları gibi bir düz yazı dosyasıdır ve ASP programlarının çalışma koşullarını düzenleyen kuralları içerir. (Bu dosyayı sırası gelince ele alacağız.) Yukarıdaki örnekte gördüğümüz gibi ASP dosyası hem HTML kodları içerir, hem de içinde bir Script diliyle yazılmış kodlar vardır. ASP'ye "program" özelliği kazandıran bu Script dili ile yazılmış kodlardır. ASP.DLL, önce gelen .asp dosyasında hangi Script dilinin kullanıldığına bakar ve bunun için gerekli ortamı oluşturur; yani bu Script dilini yorumlayacak programı çalıştırır; bu program Script'i yorumlar ve icra edilecek komutları icra eder; ASP.DLL, icra edilen komutlar, işletim sisteminin yardımını istiyorsa (örneğin bir veritabanından veri çekmek gibi, veya dosya sistemine bir dosya açtırmak, yazdırmak, sildirmek gibi) bu yardımın edinilmesini de sağlar. Bütün bu işlerin sonunda sizin yazdığınız HTML kodlarına ek yapmak (örneğin bir tablonun içini, çekilen verilerle doldurmak veya dosya sisteminden edinilen bir dosyanın içeriğini sayfaya aktarmak gibi) gerekiyorsa bu ekleri ASP.DLL yapar.

ASP.DLL, kendisine sevk edilen dosyayı satır satır okur ve önce dosyadaki ASP kodlarının gerektirdiği HTML değerlerini bulur; yani önce ASP icra edilir, gereği yerine getirilir. Sonra HTML bölümleri ile birleştirilip sonuçta sunucuya saf ve temiz bir HTML sayfası gönderilir. Bu sayfanın içinde bir satır bile ASP kodu bulunmaz. Eğer sayfanıza ziyaretçinin Browser'ında çalışması amacıyla Javascript veya VBScript kodları koydu iseniz, elbette bu kodlar HTML'in parçası olarak ziyaretçiye gidecektir. Fakat giden sayfada artık ASP'ye ilişkin hiç bir şey kalmamış olacaktır.

Biliyorsunuz, mevcut sürümleri itibariyle Browser programları içinde Netscape VBScript dilini anlamaz. ASP sayfalarımızda istediğimiz Script dilini kullanabiliriz; VBScript de kullanabiliriz. Netscape'in VBScript anlamamasıyla, ASP sayfalarımızda VBScript kullanmamızın bir ilgisi yoktur; çünkü ASP sayfasının ortaya çıkartacağı HTML kodunda ASP dolasıyla VBScript bulunmayacaktır; dolayısıyla ASP sayfalarınız, Netscape tarafından da anlaşılıp, görüntülenebilecektir. Tabiî ortaya çıkacak HTML sayfasının Netscape tarafından arzu ettiğiniz gibi görüntülenebilmesi için Netscape'in anlayabildiği dinamik HTML unsurlarına yer verme zorunluğunuz hâlâ devam ediyor.

ASP tekniğinin nasıl çalıştığını anladığımıza göre şimdi biraz terminoloji serpiştirelim ki, Webmaster meslektaşlarınızla biraraya geldiğinizde, gerçekten ASP ile mesela Javascript arasındaki farkı bildiğiniz belli olsun. ASP bir Server-Side Script teknolojisidir. Internet'te istemci ile sunucu arasındaki çizginin sunucu tarafına Server-Side (Sunucu Tarafı), istemci tarafına da Client-Side (evet, doğru tahmin ettiniz: İstemci Tarafı) denir. Server-Side'da çalışan Script programları da "Server-Side Script" (Sunucu Tarafı Script'i) adını alır. Dolayısıyla şöyle bir sayfa yaparsanız (merhaba.htm), bu sayfada Client-Side Script teknolojisi kullanmış olursunuz:

 

 

<HTML>
<HEAD>
<TITLE>JavaScript ile Tarih</TITLE>
<meta http-equiv="Content-Type"  
    content="text/html; charset=windows-1254">
</HEAD>
<BODY BGCOLOR=WHITE>
<H1>Merhaba Dünya</H1>
<H2>Bugün:</H2>
<H3>

<SCRIPT LANGUAGE=JAVASCRIPT>
<!--
tarih = new Date();
document.write(tarih);
//-->
</SCRIPT>.

</H3>
</BODY>
</HTML>

HTML sayfanıza <SCRIPT>..</SCRIPT> etiketleri arasına yerleştireceğiniz bu kodun çalışması için Server'ın hiçbir şey yapması gerekmez; kodu Browser çalıştıracak ve günün tarihini size (Türkçeleştirmediğiniz için İngilizce olarak) bildirecektir. Şimdi, bir de Server tarafında çalışan Script içeren sayfaya örnek verelim
(
merhaba2.asp ). Bu kodu yazarken kapanan Script etiketinden sonra nokta olduğuna dikkat edin:


Ve :
VBscript ile tarih :

 

 

<HTML>

<HEAD>
<TITLE>VBScript ile Tarih</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
</HEAD>

<BODY BGCOLOR=WHITE>
<H1>Merhaba Dünya</H1>
<H2>Bugün:</H2>
<H3>

<SCRIPT LANGUAGE=VBScript RUNAT=SERVER>
Response.write(Date)
</SCRIPT>.

</H3>
</BODY>
</HTML>


Bu sayfada kullandığınız Script'i VBScript ile yazdığınızı farkettiniz. Yani? Bu HTML sayfası, Netscape'de görüntülenemez! Hayıır. Görüntülenir, çünkü Script'i Netscape değil, Server çalıştıracak. Bunu <SCRIPT> etiketinin içindeki "RUNAT" özelliği ile belirtiyoruz. ("Run," çalıştır; "at" ise "içinde, üzerinde" anlamına gelir. "RUNAT" "...de çalıştır" gibi bir anlama sahiptir.) Burada RUNAT'in karşısına yazdığımız SERVER ifadesi ile, Script'in Browser'a gönderilmeden önce Server'da çalıştırılmasını sağlıyoruz; Server'a "Bu Script'i Server'da Çalıştır!" demiş oluyoruz.

  

Netscape bu sayfayı görüntüleyecektir; ama galiba bir terslik var. merhaba.asp ile merhaba2.asp'nin ekran görüntülerini ve kodlarını karşılaştırırsanız, birinde noktanın olması gereken yerde olduğu halde diğerinde noktanın yanlış yerde olduğunu görüyoruz. Oysa iki kodu da karşılaştırırsanız, ikisinde de nokta işareti, kodun bittiği yerde yer alıyor. Yukarıda ASP'nin icrasında HTML sayfa Server'a verilmeden önce ASP.DLL tarafından içindeki ASP kodlarının icra edildiğini söylemiştik. Nitekim, burada gördüğünüz gibi, ASP.DLL, HTML sayfayı içinde Server'ın çalıştırması gereken bölümle birlikte Server'a gönderdi; Server kendisine gelen dosyada kendi icra etmesi gereken (RUNAT=SERVER özelliği verilmiş olan Script'i) bölümü icra etti ve sonucu Browser'a aktardı. Yani, Server'ın çalıştırdığı Script'in sonucu sayfaya ASP'den sonra eklendi. Dolayısıyla, nokta, yanlış yerde kaldı.

Bundan çıkartacağımız sonuç şu olacak: ASP sayfalarımıza, Browser, Server ve ASP.DLL tarafından çalıştırılacak kodları yerleştirirken, sırasına dikkat edeceğiz ve hangi sırada icra edilmelerini istiyorsak, o sırada koyacağız.

Server ile ASP.DLL'in ilişkisi sadece Script dilini çalıştırmaktan ibaret değildir. ASP, istemciden gelen HTTP İstemi (Request) ve HTTP'ye giden Karşılık (Response) unsurlarından tutun, ActiveX Data Objects (ADO, AcvtiveX Veri Nesneleri) aracılığıyla, işletim sisteminin sunacağı veritabanına erişim imkanını ve işletim sisteminin sunduğu dosya yönetimine kadar bir çok imkanı kullanır. Bu "imkanlar" ASP'nin eline geçtiği anda "nesne" (Object) sayılırlar. Şimdi bu nesnelere biraz yakından bakabiliriz.

 

 

ODBC İşliyor Mu?

Kolları sıvayıp, ASP'ye kodu yazmaya başlamadan önce yapmamız gereken bir iş daha var: 
ASP sayfaları geliştirme ortamımızda,
ODBC (Open Database Connectivity, Açık Veritabanı Bağlantısı)
olması gerekir.

 Windows 98, 95 (OSR2) veya NT4.0 işletim sisteminizde Denetim Masası'nda ODBC, ODBC32 veya "ODBC Veri Kaynakları (32 Bit)" adlı bir simge görüyor olmalısınız. Bunu açın, Sistem DSN sekmesini ve açılan pencerede göreceğiniz Ekle düğmesini tıklayın. Buradaki Access, dBase, Excel, FoxPro, Paradox sürücüleri 4.00.3711.08 veya daha büyük mü? 

Değilse, Microsoft'un sitesinden (
http://www.microsoft.com/data/download.htm ) Microsoft Data Access Components (sürüm 2.1.1.3711.11 GA, 6.2 MB) güncelleme dosyasını indirin ve sisteminizi güncelleştirin. 

Windows 2000 kurulu sistemlerde bunu yapmaya gerek yok. Böylece sisteminiz, ilerde yazacağımız veri-yönlendirmeli Web uygulamaları için hazır hale gelmiş olacaktır.


 

ASP'nin Unsurları

ASP tasarımcısı olarak, biz gerçekte ASP'nin Nesneleri ile birşeyler yaparız; başka bir deyişle ASP kodlarımız bu nesnelere yöneliktir, onları kullanma ve onlardan bir sonuç alma veya onlara bir sonuç aktarma amacına yöneliktir. ASP'nin Nesneleri altı grupta toplanır:

Application/Uygulama: Bir ASP sitesi, gerçekte bir Uygulama Programı olarak görülür. Bu, HTML/CGI geleneğine aşina tasarımcı için yeni bir kavram. ASP'yi icad edenler; bir ziyaretçi bir ASP sayfasından girerek, bir sitede surfing'e başladığında, onu bir programı işleten bilgisayar kullanıcısı olarak görüyorlar. Böylece, sitemiz, her ziyaretçinin karşısına çıktığında "bir program çalışmış" gibi sayılıyor. Bu yaklaşımın Web tasarımcısı olarak bize kazandırdığı imkanları ele alacağız.

Session/Oturum: Bir ziyaretçi sitemize geldiğinde, hangi sayfamızı talep ederse etsin, bu bağlantı ASP açısından bir oturum sayılır. Her oturumun belirli bir süre devam eden özellikleri, değişkenleri ve değerleri vardır. Site tasarımında oturum özelliklerinden geniş ölçüde yararlanacağız.

Request/Talep: Browser'dan Server'a ulaşan bütün bilgiler, Request (Talep) nesnesinin ögeleridir. Bu nesneyi kullanarak, istemciden gelen her türlü HTTP bilgisini kullanırız.

Response/Karşılık: Server'dan ziyaretçinin bilgisayarına gönderdiğimiz bütün bilgiler, çerezler (cookie) ve başlıklar (Header) Response (Karşılık) nesnesinin ögeleridir. Bu nesneyi kullanarak ziyaretçiye göndermek istediklerimizi göndeririz.

Server/Sunucu: ASP, Web Server programını bir nesne olarak ele alır ve onun bize sağladığı araçları ve imkanları kullanmamızı sağlar.

ObjectContext/Nesne Bağlamı: Microsoft'un Transaction Server (MTS) programının sunduğu hizmetlere erişmemizi sağlar. MTS, ASP sayfaları içinden, uygulama programlarından yararlanmamızı sağlar. ASP uzmanlığınızı ileri düzeylere ulaştırdığınız zaman MTS ve ObjectContext nesnesinden yararlanabilirsiniz.

 

ASP'nin Dili

ASP, bir teknolojidir. Kendi başına bir yazım kuralı yoktur. ASP tekniğini kullanabilmek için, ASP sayfasının talep edilmesi halinde ziyaretçiye gönderilmeden önce ASP.DLL'ye teslim edilmesi bu teknolojinin kullanılabilmesi için hemen hemen tek şarttır. Bunu, dosya uzantısını .asp yaparak sağlarız.

ASP.DLL ise, dünyada mevcut bütün Script dilleri ile verilecek komutları kabul edebilir. Sadece ASP.DLL'e sayfadaki kodların hangi dilde olduğunu söylemeniz gerekir. Bunu, ASP sayfasının birinci satırında yaparız. Örneğin ASP'ye VBScript dilini kullanmasını belirtmek için bu satırı şöyle yazarız:

 

 

<% @Language=VBScript %>

ASP sayfalarında genellikle VBScript, JavaScript ve JScript kullanılır. 

Bir ASP sayfası içinde farklı Script dilleri kullanılabilir.Biz örneklerimizi VBScript diliyle yazacağız.

 

 

VBScript'e Giriş

Örneklerimizi VBScript diliyle yazacağımıza göre, önce hızlı bir VBScript kursu görsek iyi olur. 
Visual Basic dilini biliyorsanız, VBScript biliyorsunuz sayılır. VBScript, güçlü bir dildir; ancak Netscape firmasının hiç bir zaman Browser'ında istemci tarafında çalıştırılabilecek diller arasında kabul etmemesi
sebebiyle VBScript, Web'in istemci tarafında kendisinden bekleneni yapamadı. 
MS'un Browser'ı Internet Explorer ise VBScript ile yazacağınız İstemci-Tarafı kodları okuyabilir ve icra edebilir.

Ne var ki ASP kodlarımız hiç bir zaman ziyaretçinin Browser'ının yüzünü göremeyeceği ve sadece Server'da çalışacağı için Server'da VBScript desteği bulunduğu sürece, ASP sayfalarınızı VBScript ile yazabilirsiniz. 
Bir Server'da ASP desteği varsa, VBScript desteği de var demektir.

VBScript'in hemen hemen bütün komutlarını ve yöntemlerini ASP'de kullanabilirsiniz. Ancak bunun bir kaç kısıtlaması vardır. VB veya VBScript'e ASP dışında aşina iseniz, mesaj kutusu (MsgBox) ve girdi kutusu (InputBox) aracılığı ile programlarınıza kullanıcının bilgi girmesini sağlayabileceğinizi biliyorsunuz demektir. Bu iki komutu ASP içindeki VBScript kodunda kullanamayız. Ayrıca ASP teknolojisi zaten VBScript'in bütün komutlarını ve deyimlerini kullanmanızı da gerekli kılmayacaktır. Göreceksiniz ki, mükemmel ASP sayfaları oluşturmak için bile bir avuç VBScript komutu kullanacağız.

ASP sayfalarımızdaki HTML kodları ile VBScript (veya diğer Script dillerinin) kodlarını birbirinden ayırmamız gerekir. Bu ASP.DLL'ye, HTML'in nerede bittiğini, Script diliyle yazılmış kodun nerede başladığını gösterebilmemiz için gerekli. Bunu sağlamak için Script diliyle yazılmış  herşeyi    <%   ve %> işaretleri arasına alırız. ASP.DLL bu işaretleri görünce, içindekileri "yazmak" yerine "yapar." 

Bir ASP sayfanızda HTML'in klasik "
<" ve ">" işaretleri arasındaki unsurlar, ASP.DLL tarafından ziyaretçiye gönderilecek olan sayfaya aynen aktarılır; ancak   <%   ve %> işaretleri  arasındaki herşey, başta belirttiğiniz LANGUAGE etiketinde yazılı Script dilinin yorumlayıcısına verilir; yorumlatılarak, gereği yerine getirilir.

   <%   ve %>    işaretlerine "sınırlayıcı" denir. Sınırlayıcının içinde bir veya daha çok satır kod bulunabilir. Sınırlayıcılar ve içindeki Script, HTML etiketlerinin içinde veya dışında yer alabilir. 

Sınırlayıcının içindeki kodlarımızı açıklamak için koyacağımız yorum satırlarının başına tek tırnak işareti
( ' ) koyarız. İşte bu kuralları uyguladığımız bir ASP sayfası örneği:

 

 

<% @LANGUAGE=VBscript %>
<html>
<head>
<title>Hoşgeldiniz!</title>
<meta http-equiv="Content-Type" content="text/html;  
   charset=windows-1254">
</head>

<body>
<center>

<%
' Yazı tipi boyutunu tutacağımız bir değişken 
tanımlayalım
Dim fontBoyut 
%>

<%
' yazı tipi boyutunu 1'den 7'ye kadar değiştirelim
For FontBoyut = 1 To 7 
%>

<font size = <%=FontBoyut%>>
Hoşgeldiniz!<br>

<% Next %>

</center>
<h3>Bugün <% =WeekdayName(Weekday(Date)) %>, <% = Date %>.
Şu anda Server'da saat: <% = Time %>.<p>
</h3>

</body>
</html>

Burada sınırlayıcı arasında tek veya çok satırlı VBScript kodları ile başında tek tırnak olan icra edilmeyen, yorum satırlarını görüyorsunuz. 

HTML etiketinin içine gömülmüş VBScript kodu ise HTML'in  <FONT> etiketinde yer alıyor:
<font size = <%=FontBoyut %>>


 Burada karşılaştığımız  
<%  ifadesi, ASP'ye, "Bu değişkenin değerini bul ve tam buraya yaz!" dememizi sağlıyor. 

Bu ifade daha sonra yakından ele alacağımız 
Responce.Write   metodunun kısaltılmış halidir. 

HTML etiketinin içine yazdığımız VBScript bölümünün kendi sınırlayıcı işaretlerinin yine de kullanıldığına dikkat edin.

 

 

 

Bir iki yazım kuralı

VBScript komutları, anahtar kelimeleri ve değişken adlarının büyük harf-küçük harf olması önemli değildir. Yani yukarıdaki ifadelerden birini şu biçimlerden birinde yazabilirdik; kodumuz yine de çalışırdı:

 

 

For fontBoyut = 1 To 7 
FOR FONTBOYUT = 1 TO 7
for fontboyut = 1 to 7

Fakat... Bu demek değildir ki, VBScript ile kodlamanın kendi gelenekleri yok! VBScript'çiler genellikle komutların birinci harfini büyük yaparlar: For  gibi. Değişken adlarında ise kendinize anlamlı gelen bir biçim tutturabilir ve öyle devam edebilirsiniz.

Eğer bir kod satırı çok uzun geliyor ve daha sonra anlaşılması imkansız derecede uzuyorsa,
bu satırı alt çizgi (
_ ) ile aşağı satırda devam ettirebilirsiniz. Örnek:

 

 

<% 
If degisken1 > 1 And _
değisken1 < 10 Then 
%>

 

 

Değişkenler  - Variables

Programcılıkta işlemlerimizi değişkenlerle  ( variables ) yaparız. Değişkeni bir kap gibi düşünebilirsiniz. 
Sözgelimi "Gün," değişkenin adı ise bu değişkenin değeri Pazar, Pazartesi, Salı, vd., olabilir. 
Her değişken, türüne göre, ya bir ya da daha fazla değer tutar. Adından da anlaşılacağı gibi değişkenin değeri değişir! Bu değişikliği biz yapabiliriz; programın kendisi yapabilir.

VBScript'te, bir çok başka bilgisayar programlama dilinden farklı olarak değişkenlerin tanımlanması veya "beyan edilmesi," "boyutlandırılması" gerekmez. Belirtilmemiş, önceden tanımlanmamış bir değişkene değer atamaya kalkarsanız, VBScript bunu mükemmel şekilde kabul eder. Fakat bu kötü bir programcılıktır. 

İyi programcılık değişkenlerin önceden beyan edilmesini gerektirir. Bunu DIM komutuyla yaparız. DIM, Dimension (boyutlandır) kelimesinden kısaltılmıştır. Pek akıllıca görünmese de bu komut, bilgisayarın değişken yeri olarak bir bellek alanının boyutunu belirtmesini sağlar. Örnekler:

ASP, bir teknolojidir. Kendi başına bir yazım kuralı yoktur. ASP tekniğini kullanabilmek için, ASP sayfasının talep edilmesi halinde ziyaretçiye gönderilmeden önce ASP.DLL'ye teslim edilmesi bu teknolojinin kullanılabilmesi için hemen hemen tek şarttır. Bunu, dosya uzantısını .asp yaparak sağlarız.

ASP.DLL ise, dünyada mevcut bütün Script dilleri ile verilecek komutları kabul edebilir. Sadece ASP.DLL'e sayfadaki kodların hangi dilde olduğunu söylemeniz gerekir. Bunu, ASP sayfasının birinci satırında yaparız. Örneğin ASP'ye VBScript dilini kullanmasını belirtmek için bu satırı şöyle yazarız:

 

 

 <%
DIM Gun, Ay, Ogrenci, Not
Gun = "Pazartesi"
Ay = "Ocak"
Ogrenci = "Necip"
Not = 5
%>

Şimdi burada Gun, Ay, Ogrenci, Not adıyla dört değişken oluşturduğumuzu ve bunlara sırasıyla 
"Pazartesi," "Ocak," "Necip" ve "5" değerlerini atadığımızı görüyorsunuz. 

Bu noktada VBScript yorumlayıcısına sorsanız, "Peki, söyle bakalım, Gun değişkeninin değeri nedir?" diye, yorumlayıcı size "Bunu bilmeyecek ne var? Elbette Pazartesi'dir!" derdi. 

Belki bu noktada siz de kendi kendinize "Pazartesi, Ocak ve Necip kelimeleri tırnak içinde iken, acaba 5 rakamı neden tırnak içinde değil?" diye soruyorsunuz. Güzel soru. Ama cevabı için biraz bekleyeceksiniz.

Değişken isimleri
mutlaka
harfle başlamalıdır; içinde noktalama işaretleri bulunamaz ve uzunluğu 255 karakteri geçemez.

Kötü programcılığı önlemek için: Option Explicit

Değişkenleri tanımlamadan kullanmak "kötü programcılıktır" demek, ilerde kendi başınıza elinizle program hatası getirirsiniz demektir. Daha sonra örneklerini göreceğiz; ASP, sitemize giren bir ziyaretçiye bir oturum (Session) açar ve bazı değişkenleri oturum boyunca aklında tutar. Bir sayfada kullandığınız bir değişkeni, daha sonraki sayfada kullanabilmek için, bu değişkenin değerinin yeni sayfada değişmemesi gerekir. ASP programı yazarken, bazen gelişi-güzel değişkenlere değer atayabilirsiniz. Neden? O anda aklınıza değişken adı olacak kelime gelmediği için! Bu değişken adını daha önce kullanmışsanız ve içinde biraz sonra kullanacağınız bir değer varsa, değer değiştirilmiş olacaktır. VBScript, savurgan ve dağınık programcılığı önlemek için OPTION EXPLICIT imkanını verir. Bir ASP sayfasının birinci satırı olarak

 

 

<% OPTION EXPLICIT %>

yazarsanız VBScript DIM komutuyla belirlenmemiş değişken kullanmanıza izin vermez; 
kullanırsanız hata verir ve durur. 

Bu ifadenin işinize çok yarayacağı bir diğer nokta, kodda değişken adını yazarken hata yapmanızı önlemektir. VBScript sizin hata yaptığınızı bilemeyeceği için yanlış kelimeyi yeni bir değişken sayacaktır. Değer atamadığınız bu yeni değişkeni kullandığınız yerlerde ya programınız hata verir, ya da kendisine doğru görünen işlemler yapar, fakat beklediğiniz sonucu elde edemezsiniz. OPTION EXPLICIT, yanlış yazdığınız değişkeni yeni değişken sayarak önceden tanımlanmamış değişken kullandığınızı düşünerek, duracaktır.



Birden fazla değer tutabilen değişkenler : Dizi Değişken  -  Array  

Peki, şöyle bir değişken tanımlama acaba ortaya nasıl bir değişken çıkartır:

 

 

<%
DIM Gunler(31), Aylar(12), Ogrenciler(210), Notlar(10)
%>

Bu yöntemle oluşturduğumuz kodlarla elde edilecek "kaplar," birden fazla değer tutabilir. Yani:

 

 

<%
DIM Gunler(7), Aylar(12), Ogrenciler(21), Notlar(10)
Gunler(1) = "Pazartesi"
Aylar(3) = "Mart"
Ogrenciler(12) = "Necip"
Notlar(5) = 5
%>

Bu durumda içinde :

7 ayrı değişken tutabilecek olan
Günler değişkeninin 1 numaralı olanının değeri "Pazartesi,"

12 değer tutabilecek olan
Aylar değişkeninin 3 numaralı olanının değeri "Mart," 

21 ayrı değer tutabilecek olan
Ogrenciler değişkeninin 12 numaralı olanının değeri "Necip

10 ayrı değer tutabilecek olan Notlar değişkeninin 5 numaralı olanının değeri ise 5 olacaktır. 

Böyle,
birden fazla değer tutabilen değişkenlere Dizi Değişken veya Array denir.

Array Fonksiyonu

VBScript'in kullanılmaya hazır bir çok fonksiyonu vardır; bunlardan biri olan Array ile, kolayca dizi değişken oluşturabiliriz.

 Diyelim ki, Gunler(7) dizi-değişkenini gün adları ile doldurarak oluşturmak istiyoruz:

 

 

<%
Dim Gunler = Array ("Pazartesi" , "Salı" , "Çarşamba" , 
"Perşembe" , "Cuma" , "Cumartesi", "Pazar")
%>

ile hem dizi-değişkeni oluşturabiliriz; hem de değerlerini atayabiliriz.
Bu suretle oluşturduğumuz dizi değişkenin üyelerine daha sonra sıra numaraları ile atıfta bulunabilirsiniz. Örneğin:

 

 

<%=Gunler(6)%>

bize Pazar'ı verir. Neden? Çünkü hayatlarının büyük bölümünü penceresiz ortamlarda geçiren kişiler olan dil tasarımcıları, sayı saymaya biz normal insanlar gibi 1'den değil 0'dan başlarlar; 
dolayısıyla Gunler dizi-değişkeni
Gunler(0)'dan başlar!

Şimdi, aklınıza şu soru gelebilir: 
Dizi değişken oluşturacağımıza, neden "ogrenci1," "ogrenci2," "ogrenci3" diye değişkenler oluşturmuyoruz ve bunlara değerler atamıyoruz? Kötü soru! Dolayısıyla cevabını hemen verelim. 

Dizi değişkenlerde bir değişkene
numarasıyla atıfta bulunabilirsiniz. 
Ve numara yerine bir başka değişkeni kullanabilirsiniz. 

Örneğin, OgrenciNo değişkeninizin değeri 12 ise

 

 

<%
....
If Ogrenciler(OgrenciNo) = "Necip"
...
%>

şeklinde bir döngü ile aradığınız öğrencinin Necip olup olmadığını sınayabiliriz. (Döngülere birazdan geliyoruz!)

Başka programlama dillerine özellikle Visual Basic'e aşina olanların aklına şöyle bir soru gelebilir: 

VBScript'te değişkenin metin mi, sayı mı olduğunu ayırt etmiyor muyuz? 
Başka programlama dillerinde bir değişkenin değeri harf ve rakamlardan oluşuyorsa, yani matematik işlem yapmaya elverişli değilse bunlara
String (Alfanümerik, karakter değerler) denir. 

Programlama dillerinde bir de matematik işlem yapmaya elverişli değişken türü vardır: Sayı (
Number).

VBScript, bir değişkene
alfanümerik (karakter, metin) olarak atadığınız değeri çift tırnak içine almanızı ister. Sözgelimi Ogrenci(12) değişkeni için Necip değerini atamak istiyorsunuz: Necip kelimesini çift tırnak içine almak zorundasınız.

 Sayı olarak kullanacağınız değerleri ise tırnak içine almazsınız. 
(Sayı olarak kullanacağınız değerlerin sadece rakam olabileceğini söylemek gerekmez!) Fakat, işleri karıştıran nokta, VBScript açısından
değişken türü diye bir şey olmamasıdır. 

Visual Basic, küçültülüp Script dili haline getirilirken, değişken türü özelliği alınmayınca, ortaya işleri karıştıran (veya kolaylaştıran) böyle bir durum çıkmış bulunuyor. 

Karışıklık, çift tırnak içinde verdiğiniz bir değeri matematik işlemde kullanmaya kalktığınızda karşınıza çıkabilir. Rakam olmayan bir karakter-dizisini bir değişkene tırnaksız olarak atadığınızda VBScript "tanımsız değişken" vermeye kalktığınızı söyleyerek, duracaktır.

VBScript'in bu eksikliğini gidermek için bazı ASP programcıları değişken adlarının önüne karakter-dizileri için "str" harflerini koyarlar: strAy, strOgrenciler, gibi.

İsterseniz, VBScript'in karakter-dizisi ve sayı değişkenleri nasıl ayırt ettiğini veya etmediğini bir kaç örnekle görelim. Şu kodu yazarak, çalıştırın:

 

 

<% Option Explicit %>
<HTML>
<%
Dim Degisken(2), Toplam
Degisken(1) = "Necip"
Degisken(2) = "Dayanır"
Toplam = degisken(1) + Degisken(2)
%>
<% =Toplam %>
</HTML>

Sonuç: "NecipDayanır" değil mi? (Arada boşluk olmamasına aldırmayın şimdilik!) 

Şimdi:

Degisken(1) değeri olarak tırnak içine alarak
5
Degisken(2) değeri olarak yine tırnak içinde
10 yazın. 

Programı tekrar çalıştırın. Sonuç?
510  !?

 Peki; tırnakları kaldırın
5 ve 10 'un çevresinden. Sonuç? 15

Oh, neyse! Bir an için VBScript matematik bilmiyor sandık! Bu durum VBScript'in matematik bilgisinin kıtlığından değil, tırnak içindeki değerlerin, VBScript ayrım yapmıyor bile olsa, karakter-dizisi (String) iken toplama işleminde ard arda eklenmesinden (concatenate) kaynaklanıyor. 

Tırnakları kaldırdığınızda, VBScript bu değerlerin sayı olduğunu anladı ve doğru işlemi, yani toplama işlemini yaptı. Şimdi VBScript'in değişkenleri ele alış tarzını daha iyi kavramak için Degisken(1) değeri olarak tırnak işareti koymadan kendi adınızı, Degisken(2) değeri olarak da soyadınızı yazın ve programı çalıştırın. Ne sonuç aldınız? 

 

 

Variants

VBScript'in kullandığı tek tür değişkene variant denir. Variant, karakter-dizini (String) de olabilir, sayı (Number) da. Fakat bir variant'ın içindeki değer, veri olarak nitelendiğinde şu türlerden birine girer:

 Variants

aldığı değerler 

  Boolean

Değişkenin değeri ya True (doğru) ya da False (yanlış) olur; 
True'nun değeri -1, False'un değeri ise 0'dır.

  Byte

0 ile 255 arasında bir sayısal değer olabilir.

  Double

Yüzen noktalı değer denilen veri türüdür. Pozitif sayılar için 4.9E-324 ile 1.8E308 arasında, negatif sayılarda -4.9E-324 ile -1.8E308 arasında bir değer alabilir.

  Date/Time

Önceden belirlenmiş biçimlerde tarih ve zaman bilgisi içerir.

  Empty

Tanımlanmış ancak henüz değer atanmamış (boş) değişken türüdür.

  Error

Programın hata mesajlarını ve hata değerlerini tutar.

  Integer

Noktalık bölüm içermeyen tamsayı verilerdir; değeri -32.768 ile +32.767 arasında olabilir.

  Long

Noktalık bölüm içermeyen tamsayı verilerdir; değeri -2.147.483.648 ile 2.147.483.648 arasında olabilir.

  Null

İçinde veri bulunmamak üzere tanımlanmış değişkenlerdir.

  Object

Windows OLE Nesnelerini tutmak üzere tanımlanmış değişkenlerdir.

  Single

Yüzen noktalı değer denilen veri türüdür. Pozitif sayılar için 1.4E-45 ile 3.4E38 arasında, negatif sayılarda -1.4E-45 ile -3.4E38 arasında bir değer alabilir.

  String

Alfanumerik veri tutan değişkenlerin değeridir

 

 

 

 

 

Sabit Değerler   -  Constants 

VBScript'te bir kere verdiğiniz değeri hiç değişmeyen unsurlar (değişken diyemezdik, değil mi?) vardır. Sabit değer, bütün ASP sayfası boyunca (hatta isterseniz, bütün site, yani Uygulama boyunca) değişmeden kalır. Bu değerleri Const (constant, sabit kelimesinden türetilme) komutuyla belirtiriz:

 

 

Const DolarDeger = 560780 

Const SirketinAdi = "Web Tasarım ve Site Onarım A.Ş." 

Const Slogan
= "Siteler ve Kırık Kalpler Onarılır" 

 

VBScript'te İşlemciler (Operatörler)

Bilgisayar Operatörü ile program Operatörü arasında fazla bir fark yoktur. Her ikisi de verdiğiniz değerleri ya karşılaştırır bir sonuç bulurlar; ya da bu değerlerle aritmetik işler yapar ve bir sonuç ortaya çıkartırlar. Bilgisayar Operatörü daha sonra bu iş için sizden para ister; program operatörü istemez! VBScript'in operatörleri ve yaptıkları işler şöyle sıralanır:

 

 

    Aritmetik
    Operatörler  

 

 

   Operatör

İşlev

 

 

       +

Toplama

 

 

       -

Çıkartma

 

 

       *

Çarpma

 

 

       /

Bölme

 

 

       ^

Üssünü alma

 

 

       \

Tamsayı bölme

 

 

     Mod

Modüler aritmetik

 

.

 

 

.

 

     Karşılaştırma 
     Operatörleri  

 

Operatör

İşlev

 

         =

Bir değişkenin diğerine eşit olduğunu sınar

 

        <> 

Bir değişkenin diğerine eşit olmadığını sınar

 

      >and<

Bir değişkenin diğerinden büyük veya küçük olduğunu sınar (and kelimesi var)

 

   >= and <=

Bir değişkenin diğerinden büyük veya eşit, veya küçük veya eşit olduğunu sınar (and kelimesi var)

 

          Is

Bir ifadedeki iki referansın aynı Nesne'ye yapılıp yapılmadığını sınar

.

 

 

 

 

  Mantıksal 
  Operatörler

 

   Operatör

İşlev

 

      And

Bir veya daha fazla değişkeni test olarak karşılaştırır

 

       Or

Bir işlemin devamı için hangi koşulun oluşması gerektiğini sınar

 

      Not

Bir ifadeyi negatif hale getirir

 

      XoR

Sadece bir koşulun doğru olup olmadığını sınar

 

      Eqv

İki değişkenin eşitliğini sınar

 

      Imp

İki ifadede mantıksal implikasyon işlemi yapar.

  
VBScript ile yazacağımız ASP sayfalarında bu işlemcileri beklediğimiz sonucu verebilmesi için 
kullanım sıraları ,   operatörlerin işlem öncelik sırası  önemlidir. 

Bunu bir örnekle açıklayalım. 100'den 6'yı çıkarmak ve sonucu 2'ye bölmek istiyorsunuz;
sonuç 47 olacaktır. 

Yani: 100-6/2. Değil mi? Bu işlemin VBScript'teki sonucu 97 olacaktır. 

Çünkü, VBScript önce 6'yı 2'ye bölecek ve elde ettiği sonucu 100'den çıkartacaktır. 

VBScript'te, aritmetik işlemlerin yapılma sırası    ( öncelik sırası )şöyledir:

 

Operatör

İşlev

Öncelik

 

     ^

  Üssünü alma

       1

 

     /

  Bölme 

       2

 

     *

  Çarpma

       2

 

     +

  Çıkartma

       3

 

    +

Toplama

       3

VBScript ile hesap işlemi yaparken, aritmetik işlem sırasını karıştırarak hatalı sonuç almamak için sık sık parantez kullanmak yerinde olur. 

Yukarıdaki örnek şöyle yazılabilirdi: (100-6)/2.

 

 

     

 

VBScript'de Program Kontrolü

İster Script diliyle, ister gerçek programlama diliyle yazılsın, bir bilgisayar programının varlık sebebi, çeşitli durumları değerlendirerek, belirli durumlarda belirli kararlar verebilmesidir. Bunu programın kontrol öğelerini kullanarak yaparız. Programlar, bu öğeler sayesinde karşılaştırma yaparlar; belirli durumların oluşup oluşmadığını sınarlar; veya belirli bir durumun oluşmasına veya sona ermesine bağlı olarak bir iş yaparlar veya yapmazlar. Bunu sınamalarla (koşullu ifadelerle) veya döngülerle sağlarız. Kimi zaman da, programa (programın mantığı çerçevesinde) istediğimiz anda yapmakta olduğu işi durdurarak, başka bir işi yapmasını bildirebiliriz. Bunlara da Süreçler (veya Prosedürler) denir. (Adındaki Basic'e bakarak, VBScript'i basit bir dil sanmıyordunuz, umarım!)

Mantıksal Sınamalar

VBScript'te programın karar vermesini sağlayan ilk kontrol ögesini "eğer ... ise... yap!" şeklinde özetleyebiliriz. VBScript bu işlemi iki ayrı ifadeyle yaparız:

If.. Else

VBScript'in vereceğiniz bir durumun bulunup bulunmadığını sınamasını sağlar. Genel yazım kuralı şöyledir:

 

 

If şart Then
[şart doğru ise yapılacak işler] 
Else
[şart doğru değilse yapılacak işler]
End If

Bunu bir örnekle ifade edelim: Eğer saat 12'den önce ise sayfaya "Günaydın" yazdır; saat 12'den sonra ise "Tünaydın" yazdır. Fakat burada bir eksiklik var: Saat 18'den sonra ise sayfaya "İyi akşamlar!" yazdırmamız daha doğru olmaz mı? If döngüsü kendi içinde sınırsız Elseif (ikinci şartlı döngü) imkanı vererek bize bunu sağlar. Her Elseif'i yeni bir If gibi düşünebilirsiniz. 
İşte şu senaryoyu gerçekleştirecek kod örneği : (
hosgeldiniz01.asp ):

 

 

<HTML>
<HEAD>
<TITLE>ASP ILE SAATE GORE SELAM</TITLE>
<META http-equiv="content-type" content="text/html; charset=ISO-8859-9">
<META http-equiv="Content-Type" content="text/html; charset=windows-1254">
</HEAD>
<BODY>
<H2>
<CENTER>

<%
  If Hour(Now) <12 Then 
    Response.Write "Günaydın! "
  ElseIf Hour(Now) >= 18 Then
    Response.Write "İyi akşamlar! "
  Else
    Response.Write "Tünaydın! "
  End If
Response.Write "<BR>"
Response.Write "Site Onarım Sitesine Hoşgeldiniz"
%>

</CENTER>
</H2>
</BODY>
</HTML>

Bu programı çalıştırdığınız zaman, çalıştırdığınız saate göre sayfadaki selamın değiştiğini göreceksiniz. 
(Bu örnekte, sadece şartlı döngü işlemi yapmıyoruz; fakat aynı zamanda Hour (Now) fonksiyonu ile tanışıyoruz ve sayfadaki bütün unsurları ASP yöntemiyle yazdırıyoruz! Fakat şimdilik bu iki unsurun üzerinde de durmayın.) Programımız nasıl çalışıyor? Yukarıda başka vesile ile VBScript'in kullanılmaya hazır fonksiyonları vardır, demiştik. Bunlardan biri de o andaki saati ve tarihi bildiren Now() fonksiyonudur. Bu fonksiyondan dönen değerle bu andaki saati öğreniyoruz; ve bunu önce 12 ile karşılaştırıyoruz. Fonksiyondan dönen değer, eğer 12'den küçükse, programımız Response (Karşılık) Nesnesi'nin .Write Metodu'nu kullanarak (Nesneler ve Metodlar meselesi üzerinde de durmayın!) ziyaretçinin Browser penceresine "Günaydın" yazdırıyor.

 

 

 

Dönen Değer

Fonksiyonlar, kendilerini göreve çağıran VBScript komutlarına ve işlemlerine bir değer sunarak karşılık verirler. Buna fonksiyondan dönen değer denir. Yani diyelim ki Now() fonksiyonunu göreve çağırdınız. Bu fonksiyon derhal işletim sisteminden saati ve tarihi öğrenerek kendisini göreve çağıran işleme bildirir. Daha sonra VBScript'in kullanılmaya hazır diğer bir çok fonksiyonunu kullanacağız ve kendi fonksiyonlarımızı yazacağız. Ne zaman bir fonksiyona bir noktada atıf yaparsak, o noktaya fonksiyon tarafından bir değer getirileceğini bimemiz gerekir.

Eğer bu ilk sınamanın sonucu doğru değilse, VBScript If satırından sonraki birinci deyimi atlayacak ve ikinci deyimi icra edecektir. Yani eğer saat 12'den küçük değilse, ElseIf satırı icra edilecektir. ElseIf de tıpkı If gibi işlediği için bu kez yeni bir sınav yapılacak ve saatin 18'e eşit veya büyük olup olmadığı sınanacaktır. Eğer saat 18'e eşit veya büyükse, (sınav sonucu doğru ise) ilk satır icra edilecek ve ziyaretçinin Browser penceresine "İyi akşamlar!" yazdırılacaktır. Eğer bu sınavın sonucu da doğru değilse, ElseIf'in ikinci satırı icra edilecektir. Bu satırda ise Else bulunuyor. Else, If ve ElseIf gibi sınav yapmaz; ne olursa olsun, kendisinden sonra gelen deyimi yerine getirir. Yani saat 12'den küçük değilse, 18'den küçük veya 18'e eşit değilse, yani 12 ile 17 arasında ise, ekrana "Tünaydın" yazılacaktır.

 

 

VBScript'de Program Kontrolü  Mantıksal Sınamalar
Select Case

VBScript'in bir diğer duruma bakarak karar verme ifadesi, Select Case (Durum Seç) yapısıdır. Bu kontrol öğesinin nasıl çalıştığını şöyle özetleyebiliriz:

Durum Seç (Durumların listesi veya durumları belirten bir değişken)
Durum 1 : Yapılacak işler
Durum 2: Yapılacak işler
Durum 3: Yapılacak işler
Durum n: Yapılacak işler
Seçmeyi Bitir

VBScript, verdiğiniz durum listesine veya içinde çeşitli değerler bulunan değişkene bakarak, bu değişkenin her bir değerini bir "durum" sayacak ve verdiğiniz durumlardan hangisini tutuyorsa, ona ait komut dizisini icra edecektir. Yukarıdaki sayfamızı bu kez bu yapıyı kullanarak yazalım
hosgeldiniz02.asp )

 

 

 <HTML>
<HEAD>
<TITLE>ASP ILE SAATE GÖRE SELAM</TITLE>
<META http-equiv="content-type" content="text/html; charset=ISO-8859-9">
<META http-equiv="Content-Type" content="text/html; charset=windows-1254">
</HEAD>
<BODY>
<H2>
<CENTER>

<%
  Select Case Hour(Now)
    Case 0,1,2,3,4,5,6,7,8,9,10,11
    Response.Write "Günaydın!"
    Case 12,13,14,15,16,17
    Response.Write "Tünaydın"
    Case Else
    Response.Write "İyi Akşamlar!"
  End Select
Response.Write "<BR>"
Response.Write "Site Onarım Sitesine Hoşgeldiniz"
%>
</CENTER>
</H2>
</BODY>
</HTML>

Select Case komutuna, içindeki değerleri "durum" sayacağı dizi veya değişken olarak VBScript'in kullanılmaya hazır fonksiyonlarından Hour(Now)'ı veriyoruz. Bu fonksiyondan, 0 ile 24 arasında bir değer dönecektir. Bu değer Select Case için bir durum demektir. Select Case, bu değer ile altta sıralanan Case'leri karşılaştıracak ve elindeki değer hangi Case'i tutuyorsa ona ait komutları icra edecektir. Sonuncu Case'e lütfen dikkat edin: Burada Case olarak Else (başka) veriliyor. Bu bizi, 17'den 23'e kadar olan saatleri sıralamaktan kurtarır. 0'dan 11'e kadar olan saatlerle 12'den 17'ye kadar olan saatleri sıraladığımıza göre başka hangi saat olursa olsun, ziyaretçimize "İyi akşamlar!" dileyebiliriz. Eğer 24'den sonra ve 04'den önce ziyaretçinize "İyi geceler!" dilemek isterseniz, bu programı nasıl değiştirirdiniz?

 

 
 
 

 

VBScript'de Program Kontrolü  
Döngüler

Sınama bir programın akışını kontrol için kullanacağımız birinci en önemli unsur ise, döngü de ikinci en önemli unsur sayılır. Hatta programcının tembellik katsayısına göre, belki de birinci en önemli unsuru bile sayılabilir! Çünkü Döngü (Loop) programa, bir işi biteviye yaptırmaya yarar. Tabiî bu iş sonsuza kadar sürecek olursa, buna Endless Loop (Sonsuz Döngü) denir; en iyi program ve Windows dondurma yöntemidir! VBScript'te kullanabileceğimiz döngü yöntemleri şunlardır:

For..Next döngüsü

Programın bir işi belirli kere yapmasını istiyorsak, ona yapacağı işi bir sayaç değişkeniyle birlikte, For döngüsüyle bildiririz:

 

 

 For sayaç = başlangıç To son Step adım
...yapılacak işler...
  .....
Next

 Burada, "sayaç" yerine istediğiniz bir değişken adını, "başlangıç" yerine sayacın başlamasını istediğiniz sayıyı, "son" yerine sayacın durmasını istediğiniz sayıyı, ve "adım" yerine, sayacın kaçar-kaçar artmasını istediğinizi yazabilirsiniz. En sondaki Next deyimi ise döngünün bir sonraki adıma geçmesini sağlar. Bu adımda sayaç, Step kelimesi varsa, karşısındaki değer kadar arttırılır ve yapılacak işler yeniden yapılır. Bir örnek yapalım
(
gunler.asp ):

 

 

<HTML>
<HEAD>
<TITLE>ASP ILE GÜNLERI SAYMA</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=windows-1254">
</HEAD>
<BODY>
<H2>
<CENTER>

<%
   Dim Gunler 
   Gunler = Array("Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma",  
   "Cumartesi", "Pazar")
   For sayac = 0 to 6
    Response.Write Gunler(sayac)
    Response.Write "<BR>"
   Next
%>

</CENTER>
</H2>
</BODY>
</HTML>

Bu ASP kodunda, Gunler adıyla bir dizi-değişken oluşturuyoruz ve bu değişkenin yedi hanesine, günlerin adlarını atıyoruz. Sonra, sayac adlı sayacı 0'dan 6'ya kadar arttırıyoruz (Bir sayaç birer birer artsın istersek, Step bölümüne adım sayısı yazmayız). Şimdi kendimizi bir an için VBScript'in yerine koyalım ve birinci adımda yapacağımız işi düşünelim: "Hmm.. Programcı bey, benim sayac'ı önce 0 yapmamı istiyor; peki sayac 0 olsun. Sonra, Gunler dizi-değişkeninden sayaç değeri ile aynı sayıyı taşıyan değişkeni alıp, bunu ziyaretçinin Browser'ına yazmamı istiyor. Peki, Gunler(0) ne imiş, bakalım. Hmm Gunler(0) Pazartesi imiş. o halde ziyaretçinin ekranına bir Pazartesi kelimesi yazalım. Sonra bir de <BR> kodu yazmamı istiyor. Onu da yazalım.. Şimdi, sırada Next var. Yani bir sonraki adıma devam edeceğiz. Step değeri olmadığına göre sayacı bir arttırayım. Sayaç böylece 1 oldu. ..."

Ve böylece VBScript, sayacın son değeri olan 6'ya ulaşıncaya kadar, biteviye Gunler dizi-değişkeninden sayacın değerine göre değer seçerek ve bunu ekrana yazdırarak, işini yapacaktır. Bu bakımdan VBScript, güvenilir ve çalışkan bir arkadaştır!

 

 

While...Wend

Ne var ki, program mantığı bazen bize böyle açık ve seçik bir sayaç kurma imkanı vermez. Sayaç olarak kullanacağımız değer, programın başka bir bölümü tarafından üretiliyor olabilir. Veya bu değer ziyaretçi tarafından belirlenmiş olabilir. Özetle yapılmasını arzu ettiğimiz işin ancak sayaç bir değerden azsa, çoksa veya eşitse yapılmasını, bu durum değişirse durmasını isteyebiliriz. Bunu While (..iken) komutuyla yapabiliriz. While döngüsünü kullandığımız zaman sayacı bizim arttırmamız gerekir. Sözgelimi, yukarıdaki programın 7 günün tümünü ekrana yazmasını değil de, mesela gün sayısı 5'den küçük ise yazmasını istiyor olabiliriz. Bu durumda kodumuzda For.. Next arasında kalan bölümde şu değişikliği yapabiliriz:

 

 

While sayac <= 5
Response.Write Gunler(sayac)
Response.Write "<BR>"
sayac = sayac + 1
Wend

Wend

Burada While döngüsünün Wend kelimesiyle sonlandırıldığına dikkat edin. While satırındaki sayacı değiştirdik, programın sayaç 5'den küçük veya 5'e eşit iken işlemesini sağladık. For'dan farklı bir diğer ifade ise sayacı arttıran "sayac = sayac + 1" ifadesidir. Bu ifade, ilk bakışta garip görünebilir. Fakat bilgisayar açısından bu "sayac'ın o andaki değerini al, 1 ile topla ve bulduğun yeni değeri sayacın mevcut değerinin yerine yaz!" demektir. VBScript sayacı bir arttırdıktan sonra önce While satırındaki şartın gerçekleşip gerçekleşmediğine bakar; gerçekleşmiş ise Wend'i izleyen ilk satıra gider; gerçekleşmemişse While döngüsünün içindeki işi yapmaya devam eder. Kendinizi VBScript'in yerine koyup, birinci ve ikinci adımda nasıl düşündüğünüzü ve ne iş yaptığınızı söyleyebilir misiniz?

  
 

VBScript'de Program Kontrolü   

 

 

Do..Loop

Do (Yap) komutu ile kuracağımız döngüler iki ayrı türde olabilir: bu döngü ile bir dizi komutu, bir koşul doğru iken veya doğru oluncaya kadar yaptırabiliriz. Bu yöntemlerden her biri iki ayrı şekilde yazılabilir. Bir koşul doğru iken bazı işlerin biteviye yapılmasını istiyorsak, Do While yöntemini kullanırız:

 

 

Do While koşul
koşul doğru iken yapılacak işler
Loop

Bu ifade ile VBScript koşul doğru olduğu sürece istediğimiz işi yapacaktır. Buradaki Loop kelimesi, döngünün başa dönmesini sağlar. Bu yöntemden şu şekilde de yararlanabiliriz:

 

 

Do
koşul doğru iken yapılacak işler
Loop While koşul

Burada, Loop komutu şartın hâlâ doğru olup olmadığını sınar ve doğru ise verilen işleri yapar; artık değilse bir sonraki satıra geçer. Döngünün bir şart gerçekleşinceye kadar bir işi yapmasını ise Do Until yöntemiyle sağlarız. Bu durumda döngü şöyle yazılır:

 

 

Do Until koşul
  koşul gerçekleşinceye kadar yapılacak işler
Loop

Bu ifade ile VBScript koşul doğru oluncaya kadar istediğimiz işi yapacaktır. Buradaki Loop kelimesi, döngünün başa dönmesini sağlar. Bu yöntemden şu şekilde de yararlanabiliriz:

 

 

Do
koşul gerçekleşinceye kadar yapılacak işler
Loop Until koşul

Burada, Loop komutu şartın henüz gerçekleşip gerçekleşmediğini sınar ve henüz gerçekleşmemişse verilen işleri yapar; gerçekleşmişse bir sonraki satıra geçer. Visual Basic metinlerinde bu döngüye verilen klasik örnek, bilgisayara yazı-tura attırmaktır! Biz de ASP sayfamıza yazı-tura attırabiliriz. Bunun için şu kodu yazın ve  yazı-tura.asp  adıyla kaydedin:

 

 

<% Option Explicit %>
<HTML>
<HEAD>
<TITLE>ASP ILE YAZI-TURA</TITLE> 
<META http-equiv="content-type" content="text/html; charset=ISO-8859-9">
<META http-equiv="Content-Type" content="text/html; charset=windows-1254">
</HEAD>
<BODY>
<H2>
<CENTER>

<%
Dim ParaAt, Yazi, Tura, Atis
Randomize
Yazi = 0
Tura = 0
Atis = 0
Do While Tura < 3
atis = Atis + 1
ParaAt = Int(Rnd * 2) + 1
If ParaAt = 1 Then
%>

Yazı!<P>
<%
Yazi = Yazi + 1 
Else
%>
Tura!<P>
<%
Tura = Tura + 1
End If
Loop
%>
3 Tura getirebilmek için parayı <%=Atis%> kere atmak gerekti!
</HTML>


Bu kodda şu ana kadar karşımıza çıkmamış olan Randomize (Tesadüfî sayı bulma) Fonksiyonu'nun kullanıldığını görüyoruz.

 

 

Tesadüfî Sayı

Bilgisayarın matematik işlemlerde, özellikle istatistik hesaplamalarla kullanılması tesadüfî (rastlantısal) sayı üretmeyi gerekli kılmıştı. Fakat daha sonra bilgisayar oyunları bu işlemi adeta zorunla hale getirdi. Rastlantısal sayı, bir dizide tekrar etmesi belirli bir düzene tabi olmayan sayı demektir. Bilgisayar yokken, tesadüfî sayı tabloları matematikçiler tarafından uzun uğraşlarla üretilirdi.

VBScript, bu amaçla Visual Basic'in Randomize ve Rnd komutlarını almıştır. Randomize, tesadüfî sayı üretme sürecini başlatır; Rnd da bu sayıyı size verir. Kodunuzda bir yerde Rnd kullanacaksınız, ondan önce bir yerlerde mutlaka Randomize komutunun yer alması gerekir. Bunun bir uygulaması şu olabilir:

 

 

<% OPTION EXPLICIT %>
<HTML>
<%
Dim TesadufiSayi
Randomize
TesadufiSayi = Rnd
%>
<%=TesadufiSayi%>
</HTML>


Bu dosyayı 
tesadufi.asp   adıyla kaydedip çalıştırın; Browser'ın Yenile düğmesini her tıkladığınızda ekranda yeni bir sayı göreceksiniz. Bu sayıların rastlantısal olması, bir kere daha gelmeleri için hiç bir kural (örneğin her rakamın 123 kerede bir gelmesi veya 1 milyon 245 bin kerede bir gelmesi gibi) bulunmamasıdır. İşin tekniğini bilmek isterseniz, VBScript, her Rnd komutu icra edildiğinde bilgisayarın saatini öğrenir; içinden seçeceği bir rakamı son derece karmaşık bir formülden geçirerek size bir rakam verir. bu rakam daima 0 ile 1 arasında olur. "(Rnd*6)+1" formülü bize 1 ile 6 arasında (yani bir zarın değerlerinden her hangi biri), "(Rnd*13)+1" formülü ise 1 ile 13 arasında (yani bir iskambil destesindeki kağıt değerlerinden herhangi biri) bir değer verir. Fakat dikkat: bu değerler tam sayı değildir!

Programımızın bütün işlemi Do döngüsü bölümünde yapılıyor ve bilgisayarın bir tesadüfî sayı üretmesi esasına dayanıyor. Bunu Randomize ve Rnd fonksiyonları ile yapıyoruz. Rnd'un verdiği tesadüfî rakamı, iki ile çarpıyor ve çıkan sayıyı 1 ile topluyoruz; böylece ortaya 1'den büyük 3'den küçük bir kesirli rakam çıkmış oluyor (Neden?). Bu rakamı Int() fonksiyonundan geçirerek, kesirinden kurtarıyoruz.

Tam Sayı Elde Etmek için: Int ve Round

Rnd fonksiyonu ile ilgili yukarıdaki örneği yaptıysanız, dönen sayının 0 ile 1 arasında, yani daima kesirli olduğunu görmüş olmalısınız. Bazen bizim sayfalarımızdaki hesaplamalar veya veritabanından alınan değerler de kesirli olabilir. Örneğin öğrencilerin not ortalamalarını hesaplattırırken VBScript size sonu gelmez kesirler verecektir. Oysa çoğu zaman bu rakamların ya yukarı "yuvarlanması", ya da sadece tam sayı bölümü gerekir. VBScript'te Int() fonksiyonu, bize bir sayının tam sayı bölümünü verir. Diyelim ki elimizdeki KesirliSayi değişkeninin değeri 123,234567 olsun.

 

 

Tamsayi = Int(KesirliSayi)

işleminden sonra Tamsayi değişkenin değeri 123 olur. Fakat kimi zaman bir sayının kesirli bölümünü böyle bıçakla kesip atmak işimize gelmeyebilir. Round() fonksiyonu, kesirli bir sayıyı yukarı veya aşağı "yuvarlayarak" tam sayı haline getirir. Bu kez ki elimizdeki KesirliSayi değişkeninin değeri 5,6 olsun.

Tamsayi = Int(KesirliSayi)  

işleminden sonra Tamsayi değişkenin değeri 6 olur. Kesirli sayı 56,2 ise, Round() fonksiyonu bize 56 değerini verir.

Programımız, elde ettiği ve Paraat değişkenine kaydettiği bu sayı 1 ise, Yazı gelmiş sayıyor; ve Browser Penceresine "Yazı!" yazıyor. Bu arada yapılan atış sayısını kaydettiğimiz Atis ve gelen tura sayısını tuttuğumuz Tura değişkenlerinin değeri bir arttırılıyor. ParaAt değişkeninin değeri başka bir şeyse (ne olabilir?), programımız bu kez tura geldiğine hükmediyor ve Browser penceresine "Tura!" yazıyor. Do döngüsü, Tura gelen atışların sayısı 3 oluncaya kadar devam ediyor. Çünkü Do döngüsünü While Tura < 3 (Tura 3'den az iken) deyimi ile çalıştırıyoruz. Ve program sonunda 3 tura gelinceye kadar kaç atış yaptığını yazıyor.

 

VBScript'de Program Kontrolü  

 

 

Dizi değişkenler için döngü: For Each..Next

For..Next gibi çalışan bu özel döngü, sayaç değeri kullanmaz, fakat bir dizi değişkenin bütün değerleri için bir kere icra edilir. Dizi-değişkenler, VBScript ile yapacağımız işlemlerde önemli bir yer tutar. Örneğin bir sınıftaki öğrencilerin veya müşterilerimizin listesi bir dizi değişkenin elemanları olabilirler. Yapmak istediğimiz işlem, dizi-değişkenin bütün elemanları için tekrar edilecekse, For Each..Next döngüsü daha elverişli olabilir. Bir dizi-değişkenin eleman sayısı ilerde değişirse ve siz döngüyü For..Next ile kurmuşsanız döngünün sayacı için verdiğiniz için alt ve üst sınırı değiştirmek zorunda kalırsınız. Oysa For Each, kaç kere tekrar edeceğine ilişkin değeri her zaman dizi-değişkenin elemanların sayısından alır. Örneğin, bütün öğrencilerin listesini tutan Ögrenciler dizi-değişkeninin bütün elemanlarının değerini ekrana yazdıralım:

 

 

For Each Ogrenci In Ogrenciler
Response.Write Ogrenci
Next

Burada "Ogrenci" Ogrenciler dizi-değişkeninde döngünün her adımında okunan bir elemanın değerini tutar. For Each döngüsü tarafından "okunmakta olan" dizi-değişkenin her bir değeri sırayla bu değişkene yazılacaktır. Bunu bir tür endeks değişken olarak düşünebilirsiniz.

 

 

Döngüyü durdurmak isterseniz

Bir döngüden belirlediğiniz koşul gerçekleşsin-gerçekleşmesin çıkmanız gerekebilir. Bunu bir başka değişkendeki değişiklik zorunlu kılabilir. Bir döngüden çıkmak için Exit (çık) ifadesini kullanabilirsiniz. Bu ifade, döngünün yaptığı işler arasında, genellikle bir If deyimi ile birlikte yer alır. Örneğin

 

 

For sayac = 1 to 10
[..bir takım işler yap..]
If Degisken1 > Degisken 2 Then Exit For
[..bir takım işlere devam et..]
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 çıkabiliriz. Bu ifadenin kullanımı da Exit For gibi olur.

 

                                                         ANASAYFA