Root > Documents > Web Güvenlik Açıkları > vb 3 (yeni baslayanlar icin)
Cyber-Warrior.Org \ Doküman \ Web Güvenlik Açıkları > vb 3 (yeni baslayanlar icin)
Madde
  Yazar : themyth
  Date : 23.11.2004 16:16:30
 
# vb 3 (yeni baslayanlar icin)
 

 Bölüm 3 - Visual Basic’i Kavrama                 

 

 

 Degisken türlerinin atanmasi

 

Bir degiskenin türünün atanmasi, degiskeni tanimlarken mümkün olmaktadir. (farkli metotlarda vardir, bunlari ileriki konularimizda görecegiz)

 

          Degiskenler;

Dim [Degisken ismi] as [Degisken Türü]

 

...seklinde tanimlanirsa, hem tanimlanmis hemde türü belirtilmis olur. Sadece ve sadece “as” anahtar sözcügünü kullanip, degisken türünü yazarak bu isi yapmak mümkün olacaktir.

 Örnek;

 

A adli ve türü Byte olan bir degisken tanimlayalim.

 

Sub Deneme()

Dim A as Byte

End Sub

 

 

... görüldügü gibi son derece basit ve kolay bir sekilde degisken türü belirlemek mümkündür.

 

Birden fazla degiskeni tanimlayalim.

 

Sub Deneme()

Dim a as Integer

Dim b as Byte

Dim c as Boolean

End Sub

 

Ayrica bu islemi;

 

Sub Deneme()

Dim a as Integer, b as Byte, c as Boolean

End Sub

 

... seklinde de yapmak mümkündür. Ancak dikkat edilmesi gereken nokta;

 

Sub Deneme()

Dim a, b, c as Byte

End Sub

 

... seklinde bir ifade de a ve b adli degiskenlerin degisken türü “Variant” ‘tir. Sadece ve sadece c degiskeninin degisken türü “Byte” tir. Yani bütün degisken türlerini teker teker belirtmek gerekir.

 

Simdi degiskenleri türleriyle atayip sonra degerler verelim.

 

Sub Deneme()

Dim i as integer

Dim k as string

i = 346

k = “Deneme yazisi V B K A Y N A K . C O M”

End Sub

 

 

 Yanlis degisken türleri

 

Eger sayisal bir degisken türüyle (Byte veya Integer) belirtilmis bir degiskene yazisal deger verirsek ne olur?

 

Sayisal degisken türleriyle belirtilmis bir degiskene yazisal ifade girildiginde ;

 

Run Time 13 – Type Mistmacth

 

...hatasi görünür. Bu hata Visual Basic ‘in kendi ürettigi bir hata mesajidir ve “yanlis deger , yanlis yazim” anlamina gelir.

 Örnegin;

 

Sub Deneme()

Dim a as byte

a = “CW”

End Sub

 

          Eger sayisal bir degisken türüyle belirtilmis bir degiskene sinirinin üstünde veya altinda bir deger verirsek ne olur?

 

Sayisal degiskene limiti (siniri) disinda bir deger verilince ;

 

Run Time 7 - Overflow

 

...hatasi görünür. Bu hata Visual Basic ‘in kendi ürettigi bir hata mesajidir ve “limit disinda” anlamina gelir.

 

 Örnegin;

 

Sub Deneme()

Dim a as byte

a = 2135

End Sub

 

 

 Parametre ve argüman

 

 YENI TANIM : Parametre

 

          Parametre; programlarin sonlarina eklenen komutlara verilen addir. Yani bir programi çalistirirken, program isminin sonuna bir yada birden fazla parametre girilebilir.

MS DOS’dan hatirlarsak;

dir /s /b /l

 

/b /l /s , dir komutunun parametreleridir.

 

 Örnegin;

Bir word dosyasini açtiinizda, öncelikle MS Word açilir, daha sonra bu dosyayi otomatik olarak açar. Word dosyasi Word’ü çalistirdiginda kendi dosya yolunu ve ismini wor’e bir parametre olarak girer. Word’degisken bu parametreyi okur ve dosyayi açar. Bunu “Baslat/Ayarlar/Klasör seçenekleri” ‘nden görmek mümkündür. Buradan , “Dosya Türleri” ‘ne gelip, listeden “Microsoft Word Dökümani” ‘ni seçiniz. Daha sonra “Düzenle” butonuna tiklayiniz ve gelen pencere degisken “Eylemler” bölümünden “Aç” seçenegine tiklatin ve alttaki “Düzenle” butonuna basiniz. Çikan pencerede “Eylemi yürütmek için kullanilan uygulama” ‘nin altindaki yazi kutusunda;

 

"C:\Program Files\Microsoft Office\Office\WINWORD.EXE" /n

 

yazmaktadir. Buradaki “/n” seçenegi bir parametredir DDE iletisinin görnderilmesini emreder.

 

“DDE iletisi” ‘nin altindaki yazi kutusunda;

 

[REM _DDE_Direct][FileOpen("%1")]

 

yazmaktadir. Buradaki “%1” o anda açilan dosyanin ismi anlamina gelmektedir.

Bu konu bizim için önemli degildir. Sadece parametrelerin ne oldugunu bilmek bize Argümanlar da yardimci olacaktir. Parametrelerin genel amaci program bilgi vermektir. (açilacak dosyanin ismi gibi)

 

 

 YENI TANIM : Argüman

 

          Argüman’da parametre gibi, bir eklentidir. Ancak argümanlar prosedürlerin sonuna eklenir. Aynen parametrelerde oldugu gibi, prosedürlere bilgi vermektedir.

 

 Örnegin;

 

          Diyelim ki, programimizda kullanici kayidi yapan ve bunlarin bilgilerini yükleyen bir prosedür olsun.

 

Sub KullaniciKayitGir()

......... islemler

End Sub

 

Sub KullaniciKayitOku()

......... islemler

End Sub

 

          Buraraki islemler bölümünde, yapilan is bizim için önemli degildir. Sadece amacimiz bilgileri kaydetmek ve okumak oldugu için kayit etme sistemi bizi ilgilendirmeyecektir.

 

          Fakat burada ki önemli nokta: KullaniciKayitGir veya KullaniciKayitOku prosedürlerinde hangi kullanicinin okunacagi veya girilecegi belirtilmemistir. Yani bu prosedürleri bu sekilde kullanmak imkansizdir. Mutlaka ve mutlaka hangi kullanicinin girilecegi veya okunacigi belirtilmelidir. Iste bunun için argüman denen degiskenler kullaniriz.

 

 Örnegin;

 

Sub KullaniciKayitGir(KullaniciIsmi)

......... islemler

End Sub

 

Sub KullaniciKayitOku(KullaniciIsmi)

......... islemler

End Sub

 

Görüldügü gibi bu prosedüre kayit girerken veya alirken, bir degisken girmemiz gerekecektir. Bu degisken “KullaniciIsmi” adli argümandir.

 

Kullanilisi da (yani çagirilmasi);

 

Sub Deneme

KullaniciKayitGir “THEMYTH”

End Sub

 

...seklinde olabilir. Veya “KullaniciIsmi” yerine her türlü deger girebiliriz. Ayni islem okurkende geçerlidir.

 

Sub Deneme

KullaniciKayitOku “THEMYTH”

End Sub

 

... seklindedir. Farkli bir örnekten bakacak olursak, iki sayiyi çarpan bir prosedürü ele alalim.

 

Sub ÇarpimYap()

 

End Sub

 

... simdi de çarpilacak iki sayiyi argüman olarak girelim.

 

Sub ÇarpimYap(BirinciSayi , IkinciSayi)

..... islemler

End Sub

 

Gördügünüz gibi iki parametre arasinda “,” isareti kullanmak gerekmektedir. Bu sekilde 1,2,3,..... veya sayisiz argüman girmek mümkündür.

Bu prosedürü çagirirken de;

 

Sub Deneme

ÇarpimYap 13,2

End Sub

 

... seklinde olacaktir.

 

 Prosedürlerden sonuç almak

 

          Yukarida ki örnekte Visual Basic, sadece çarpma islemini yapar (tabiki siz Çarpim yap prosedüründe “...islemler” bölümüne islemleri yazinca) , fakat bu sonucu size göstermez. Tabiki bir kullanici kayiti yaptiginizda bir sonuç görmeye ihtiyaç duymayabilirsiniz. Fakat; örnek olarak; çarpma islemini yapmanizin amaci, bu islemin sonucunu almaktir. Iste bu yüzden çarpma islemini yapip sonucu almak için prosedürün degerini (dönüs degerini) çarpma isleminin sonucuna esitlemek gerekmektedir.

 

Öncelikle islemin sonucunu bulalim

 

Sub ÇarpimYap(BirinciSayi,IkinciSayi)

Dim a as integer

a = BirinciSayi * IkinciSayi

End Sub

 

Böylece a degiskenine iki sayi çarpiminin sonucunu esitlemis olduk. Simdi de  bu prosedürün degerini bu çarpim isleminin sonucuna esitlemek gerekiyor. Ancak sunu bilmeliyiz.

 

Function ile Sub arasindaki fark; Sub ile belirtilen bir prosedüre veri aktarilamaz, deger verilemez. Yani bir sonuç döndürülemez. Fakat bu olay Function’da olanaklidir. Iste bu yüzden prosedürümüzü function olarak degistiriyoruz.

 

Function ÇarpimYap(BirinciSayi,IkinciSayi)

Dim a as integer

a = BirinciSayi * IkinciSayi

ÇarpimYap = a

End Function

 

...gördügünüz gibi bu prosedüre de bir degiskene deger atar gibi deger atamak mümkün oluyor.

 

Tabi bunu biraz kisaltip asagidaki gibi de direk olarak fonksiyonun sonucuna esitlemek mümkün olacaktir.

 

 

Function ÇarpimYap(BirinciSayi,IkinciSayi)

ÇarpimYap = BirinciSayi * IkinciSayi

End Function

 

Peki biz bu dönen degeri nasil alacagiz? Bu islemi yapip sonucu bir degiskene almak için;

 

Sub Deneme()

Dim Sonuç as integer

Sonuç = ÇarpimYap(34,2)

End Sub

 

Function ÇarpimYap(BirinciSayi,IkinciSayi)

Dim a as integer

a = BirinciSayi * IkinciSayi

ÇarpimYap = a

End Function

 

... seklinde olmaktadir. Sari ile tarali bölümde; gördügünüz gibi

 

[degisken ismi] = [prosedür ismi]  “(“  argümanlar “)”

 

Böyle bir veri aliminda parantez kullanmak zorunludur. Burada 68 sonucunu aliriz.

 

          Burada görüldügü gibi biz; “BirinciSayi” adli degiskene 34 degerini, “IkinciSayi” adli degiskene 2 degerini girip fonksiyonu bu sekilde çalistirdik ve sonucunu da “Sonuç” adli degiskene atadik.

 

 Örnegin;

 

Bu özelligi kullanarak; Fahreneit termometresini, Celcius termometresi degerine çevirelim.

 

Fizikten hatirlarsaniz;

 

C/100 = (F-32)/180

 

... gibi bir denklem bulunmaktaydi. Amacimiz, Fahreneit ‘tan Celcius’a çevirmek ise öncelikle sonucun ne olacaginiz belirlemektir. Fahreneit ‘tan Celcius’a çeviriyorsak sonuç, Celcius olacaktir. Denklemden Celcius degerini çekersek

 

C = (F-32) /180 * 100

 

...olur. Simdi fonksiyonumuzu yazalim. (Fahreniet için F kullanalim)

 

Function FahreneittanCelciuse(F)

FahreneittanCelciuse = (F – 32) / 180 * 100

End Function

...seklinde olacaktir.

Bu fonksiyonu kullanamk içinde;

 

Sub Deneme

Dim A

A = FahreneittanCelciuse(50)

End Sub

 

Function FahreneittanCelciuse(F)

FahreneittanCelciuse = (F – 32) / 180 * 100

End Function

 

A ‘nin degeri ; 10 olur.

 Baska bir örnek;

 

          Öyle bir fonksiyon yapmamiz gerekiyor ki, bu fonksiyon girilen isim ve soyisimleri aralarina bir bosluk ekleyerek birlestirmelidir.

 

Function Birlestir(Ad,Soyad)

Birlestir = Ad & “ “ & Soyad

End Function

 

“ “ (tirnak bosluk tirnak) ifadesi bir bosluk anlamina gelir.

Bu fonksiyonun kullanilisi da;

 

 

 

Sub Deneme

Dim a as string

a = Birlestir(“VISUAL”,”BASIC”)

End Sub

 

Function Birlestir(Ad,Soyad)

Birlestir = Ad & “ “ & Soyad

End Function

 

a nin degeri “VB KAYNAK” olur. Burada da Ad adli degisken yerine “VB” degerini , Soyad degiskeni yerine de “KAYNAK” degerini vermis bulunuyoruz.

 

Argümanlar da birer degisken oldugundan, argümanlarinda degisken türü belirtilebilir. Yani yukarida gördügünüz Ad ve Soyad adli argümanlar birer degiskendir ve bunlara degisken türü vermek mümkündür.

 

Sub Deneme

Dim a as string

a = Birlestir(“VISUAL”,”BASIC”)

End Sub

Function Birlestir(Ad as string ,Soyad as string)

Birlestir = Ad & “ “ & Soyad

End Function

 

Gördügünüz gibi Ad ve Soyad adli degiskenlerin türünü String yani yazisal ifade olarak belirledik. Tabi argümanlarin türleri farkli olabilir, Byte, Integer... olabilir. Biz bir ad ve soyad ‘in yazisal ifade oldugunu bildigmizden string degisken türünü seçtik. Asagidaki örnekte ise baska bir degisken türü verelim.

 

Sub Deneme

Dim A

A = FahreneittanCelciuse(50)

End Sub

 

Function FahreneittanCelciuse(F as integer)

FahreneittanCelciuse = (F – 32) / 180 * 100

End Function

 

Argümanlarin degisken türü oldugu gibi; fonksiyonlarinda degisken türü bulunmaktadir. Bir fonksiyonun degisken türü Byte, String, Integer ... olabilir.

 

Sub Deneme

Dim a

a = Birlestir(“VISUAL”,”BASIC”)

End Sub

 

Function Birlestir(Ad as string,Soyad as string)as string

Birlestir = Ad & “ “ & Soyad

End Function

 

Bunun anlami: Birlestir adinda bir fonksiyon var; Ad ve Soyad adinda iki adet String türünde argümani bulunuyor, ve bu fonksiyonun dönen degerinin türü String’tir.

 

Oldukça kullanisli olan bu sistem sayesinde yine fazla hafiza kaybindan kurtulmus oluruz. Yani Function türlü bir prosedürün bir degeri oluyorsa mutlaka dönen bu degerin türü de olabilir ve bu türü belirtmek bizim için faydalidir.

 

 

Visual Basic ‘in kendine ait birçok fonksiyonu bulunmaktadir. Bunlar : Asc, Atn, Mid, Space, Int, Rnd, Round, Fix, DoEvents....... gibi

 

   
   
Cyber-Warrior TIM All Legal and illegal Rights Reserved.\CWDoktoray 2001©