Bölüm 2 - Visual Basic’te Ilerleme
Konular:
Degiskenlerin belirlenmesi (tanimlanmasi)
Visual Basic ‘te “=” isareti
Degiskenlere yazisal degerlerin atanmasi
Visual Basic \'te "&" isareti
Degisken Türleri
Degiskenlerin belirtilmesi (tanimlanmasi):
Bir degiskeni Visual Basic’te kullanabilmek ve degiskenlerden yararlanabilmek için degiskenleri belirtmek gerekmektedir. Bir degiskeni belirli bir kümeye ait olarak tanimlayip belirtmeye “degiskeni belirtmek” gerekir
Matematikten hatirlarsak;
Bir fonksiyon veya kümesel islem icin kullanacagimiz degiskenlerin ne tür bir sayi olacagini nerede tanimli oldugunu belirtmemiz gerekir.
x = { x | x є Z+ , x < 6 , x > 2 }
Bu matematiksel ifadenin anlami:
X öyleki; x sayisi pozitif tam sayilarda tanimli, 6 dan küçük, 2 den büyük
(Buradaki Z+, pozitif tamsayilari göstermektedir)
Burada sonuç olarak x degiskeninin alabilecegi degerler:
x = { 3, 4, 5}
Matematikte iyi olmayanlar üzülmesinler, burada sadece belirtmek istedigimiz, x degiskeni belirli bir sinirlama ile tanimlamaktir. Tabi ki bir sinirlama getirmeden de belirtme yapmak mümkündür.
Örnek olarak;
x = { x | x є Z}
Burada x bütün tam sayilar olabilir.
Simdi farkli bir yoldan açiklama yapalim.
Örnek olarak;
A adiyla tanimladigimiz bir topluluk var. Bu A toplulugunu söyle ifade ediyoruz:
Istanbuda, Ümraniyede, Çamlica sitesinde, Cansu apartmaninda, 3. katta ikamet eden insanlar.
Eger bir degiskeni bu kümeye ait olarak tanimlarsak, bu degisken degeri, sadece buradaki insanlardan birinin ismi olarak deger alabilir. Matematikte verdigimiz örneklerde ayni olayi ifade etmektedir.
Tabiki bu kümeyi genisletmek veya daraltmak, veya bir küme belirtmeksizin sadece degiskeni belirtmek te mümkündür.
Sonuçta Degisken belirtmek bir tür beyan etmedir. Tabiki daha büyük bir kümeye ait bir degiskeni belirtmek ve bunu saklamak için daha çok yer harcanacaktir.
Örnek olarak;
Kisilerin adreslerini tuttugumuz bir dosya düsününüz. Eger “Istanbuda, Ümraniye’de, Çamlica sitesinde, Cansu apartmaninda, 3. katta ikamet eden insanlar.” seklinde belirttigimiz kümeden bir kisinin adresini yazacaksak sadece “5. Daire” diye belirtmek mümkün olacaktir. Fakat böyle bir küme belirtmeden bir kisinin adresi için
“KITA – ÜLKE – SEHIR – ILÇE (veya KASABA) – SEMT – SOKAK – BINA – NUMARA – POSTA KODU....” gibi bir çok bilgi girmek zorunda kaliriz. Haliyle bu tip tanimlama kagit üzerinde de daha çok yer kaplar. Aynen programlama da da bu tip tanimlamalar yani daha genis tanimlamalar, daha çok yer kaplarlar.
Bir degisken, prosedürler içinde;
seklinde belirtilir.
Örnek olarak;
”Merhaba” adinda bir sub prosedürümüz bulunmaktadir. Bu prosedürün sub veya function olmasi önemli degildir. Sadece belirtmek istedigim herhangibi bir prosedürde degiskenlerin tanimlanmasidir.
Peki tanimlamak istedigimiz degiskenleri nereye nasil yaziyoruz.
Örnek olarak;
”Merhaba” adli bu prosedür içinde, ”a” adinda bir degiskeni tanimlamak için
Sub Merhaba()
Dim a
End Sub
... seklinde bir ifade kullaniyoruz. Sonuç olarak bu örnekte “Merhaba” adli prosedürde “a” adli bir degisken belirtmis bulunuyoruz.
Yeni bir örnek;
“Merhaba” adli prosedürde a, b, mat, c12 adli 4 tane degisken belirleyelim (tanimlayalim).
Sub Merhaba()
Dim a
Dim b
Dim mat
Dim c12
End Sub
... gördügünüz gibi degisken tanimlama son derece basittir. Degiskenleri alt alta “dim” kullanarak tanimlayabildigimiz gibi ayrica;
Sub Merhaba()
Dim a, b, mat, c12
End Sub
... seklinde de belirtmek mümkündür. Bu yöntem bizim için daha kisa ve kullanislidir.
q Degisken isimlerini asla tirnak ifadesi içinde yazmayiniz
Örnek olarak ;
Dim “a”
seklinde bir degisken belirtmesi olamaz.
q Tirnak içinde gördügünüz hiçbir ifade degisken degildir.
q Dim ile prosedürlerde belirtilmis degiskenler prosedürde “End Sub” veya “End Function” ifadesiyle yok olurlar. Ve ayrica dim ile belirtilen degiskenler form içinde bilgi tasimazlar, sadece o prosedür içinde kullanilirlar.
Visual Basic’te “=” isareti
Visual Basic, program kodlari içerisinde; bir “=” isareti gördügünde, durur ve ilk olarak yanliz ve yanliz “=” isaretinin deger kismina yani sag tarafina bakar. Esittir’in sag tarafini hesaplar, daha sonra da esittirin sol tarafindaki degiskene esitler.
Sub Deneme()
Dim a
a = 3 + 3 / 3
End Sub
Öncelikle gördügüz sari bölümdeki deger hesaplanir (4), daha sonra “a” degiskenine atanir.
Bir prosedür içinde tanimladigimiz bir degiskene, süphesiz deger veririz. Çünkü zaten bir degiskeni bir degeri tutmasi için belirtiriz. Degiskenlere deger atamak “=” isaretiyle mümkün olmaktadir. Visual Basic’te, iki türlü degisken atamasi vardir. Bunlar:
Degisken = Deger Esitlemesi
Asagidaki örnekte bir degiskene bir deger atadik.
Sub Deneme()
Dim a
a = 3
End Sub
Örnekte, “a” adli degiskene 3 degerini atadik. Simdi asagidaki örnege bakalim.
Sub Deneme()
Dim a, b, c
a = 3
b = 4
c = 2.876456
End Sub
Örnekte, “a”, “b”, “c” adli degiskenlere “3”, “4”, “2.876456” degerlerini atadik. Simdi asagidaki örnege bakalim.
Sub Deneme()
Dim a
a = 3
a = a + 1
End Sub
Sari ile taranmis alana baktiginizda;
a = a + 1
...ifadesinde, matematiksel bir yanlis oldugunu görürsünüz. “Nasil olurda bir sayi (a) kendisinin bir fazlasina esit olur.” Yani 123 nasil olurda 124’e esitlenir. Bu matematiksel olarak yanlistir. Fakat Visual Basic de yanlis degildir. Yukarda belirttigimiz gibi, öncelikle “=” in sag tarafi hesaplanir. Yani;
a + 1
“a” degiskeninin degeri 3 oldugundan
3 + 1 = 4
...sonucu alinir. Simdi bu alinan deger esitligin diger tarafindaki (sol) degisken degerine esitlenir. Yani; a = 4 olur. Bunun gibi ifadeleri daha sonralari döngülerde kullanicagiz.
Degisken = Degisken Esitlemesi
Ikinci tip esitleme ise, bir degiskenin degerine, bir baska degiskenin degerini atamaktir.
Sub Deneme()
Dim a, b
a = 3
b = a
End Sub
Burada ilk olarak; a degiskenine “3” degerini atadik. Daha sonra da, b degiskenine a degiskeninin degerini atadik. Iste böyle bir durumda da yine “=” kuralimizi kullanicaz. Öncelikle “=” sag tarafini hesaplayalim.
b = a
a, 3 oldugundan...
b = 3
Iste sonuçta; b degiskeni a degiskeninin degerini alacaktir.
Degiskenlere yazisal degerlerin atanmasi
Süphesiz, degskenlere sayisal deger atiyabildigimiz gibi, yazisal degerlerde atamak mümkündür. Örnegin; a adli degiskene “Nasilsin” yazisal ifadesini atayalim
Sub Deneme()
Dim A
A = “Nasilsin”
End Sub
Gördügünüz gibi, yazisal ifadeleri tirnak içinde yaziyoruz. Eger bu yazisal ifadeyi tirnak içinde belirtmezsek, o zaman A degiskeninin degeri Nasilsin adli bir degiskenin degerine esit olur. Böyle bir degisken olmadigi için, A degiskeninin degeri bos olur. Asagida örnekte görülüyor.
Sub Deneme()
Dim A
A = Nasilsin
End Sub
Asagidaki iki ifadedeki fark; ilk ifadede A degiskeninin degeri “Nasilsin” yazisal degeridir. Ancak ikincide, A degiskeninin degeri yoktur.
|
Sub Deneme()
Dim A
A = “Nasilsin”
End Sub |
Sub Deneme()
Dim A
A = Nasilsin
End Sub |
Ikinci ifadede eger Nasilsin adli bir degisken olsaydi, o zaman A degiskeninin deger Nasilsin adli degiskeninin degeri olurdu.
Örnegin:
Sub Deneme()
Dim A, Nasilsin, B
Nasilsin = “Güzel”
A = Nasilsin
B = “Nasilsin”
End Sub
Yesille taranmis bölgedeki A degiskeninin deger “Güzel” dir. Sari ile taranmis B degiskeninin degeri ise “Nasilsin” dir.
q Hiçbir zaman bir yazilsal deger veya sayisal deger bir degiskene esitlenmez.
Sub Deneme()
Dim A
3 = A
End Sub
..gibi bir ifade degisken görüldügü gibi 3’e bir degisken atamak imkansizdir. Çünkü “=” in sol tarafinda mutlaka bir degisken olmalidir ki deger atanabilsin. Fakat 3 sabit bir degerdir.
Aslinda degiskenleri belirlemeden de kullanabiliriz. Fakat bu bize çok hafiza kaybettirir. Yani RAM’leri doldurur. Eger küçük bir program yapiyorsak bu az ram kaybi bizim programimizi etkilemez. Ancak büyük programlarda, büyük etkiler olusur. Programin yaptigi islemler yavaslar. Bu yüzden profesyonelce çalismali ve her degiskeni belirtmeliyiz.
Visual Basic ‘te “&” isareti
Visual Basic ‘te iki yazisal ifadeyi birlestirmek için “&” isareti kullanilir.
Örnegin;
Sub Deneme()
Dim A as string
A = “C” & “W”
End Sub
Burada A degiskeninin degeri “VBKAYNAK.COM” olur. Tabi bunu
Sub Deneme()
Dim A as string
A = “CW”
End Sub
...seklinde belirtmek daha kolaydir. Ancak, bir degisken ve bir yaziyi birlestirmek için & kullanmak zorunludur.
Sub Deneme()
Dim A as string,B as string
A = “CW”
B = A & “’ye hosgeldiniz”
End Sub
Burada ise B degiskeninin degeri “VBKAYNAK.COM’a hosgeldiniz” olur. Görüldügü gibi yazisal degerli ifadeleri birlestirmek için “&” kullanilir.
“&” isareti daha çok bilinmeyen degerlerde kullanilir. Yani programi hazirlarken bir özellik düsündünüz. Bu özelligin program kapandiginda “Güle Güle [Kullanici Ismi]” mesajini göstermesini istiyoruz. Biz programi yazarken, programi kullanacak kisinin veya kisilerin ismini bilmemekteyiz. Kullanici ismi Windows’a kayitlidir. Bunu registry sayesinde okuyup alabiliyoruz (Registry’yi daha ilerki konularimizda görecegiz). Suan için registry’den bu kayiti nasil ve hangi yöntemle okudugu önemli degildir. Sadece bu degeri okuyup bir degiskene esitledigimizi düsünelim.
Sub Deneme
Dim Kullanici as string
Dim Kullanici as string
Kullanici = ... Registry’den okunacak
Mesaj = “Güle Güle “ & Kullanici
End Sub
Sari ile taranmis alana baktigimizda “Güle Güle “ degeriyle Kullanici adli degiskenin degeri birlestiriliyor.
Degisken Türleri
Her degiskene, o degiskene atayacagimiz degere göre bir degisken türü seçebiliriz. Bu bize programlarimizda hiz performans kazandirir. Daha dogrusu uygun tür bizi hafiza kaybindan kurtarir. Asagidaki tabloda degisken türleri gözükmektedir.
Isim |
Tür |
Varsayilan deger |
Deger |
Boyut |
|
Byte |
Tam Sayi |
0 |
0 – 255 arasi |
1 Byte |
|
Boolean |
Dogru / Yanlis |
Yanlis |
-1(Dogru), 0 (Yanlis) |
2 Byte |
|
Integer |
Tam Sayi |
0 |
-32.768 / + 32.767 arasi |
2 Byte |
|
String |
Yazisal ifade |
“” |
1 / 65.400 |
X Byte |
String |
Yazisal ifade |
“” |
231 karakter (2 Milyar) |
10+ X Byte |
|
Variant |
Genel |
(Bos) |
Her türlü deger |
16 Byte |
X: Karakter sayisi kaç ise, X o sayiya esittir. Örnek: 5 karakterli bir yazisal ifade hafizada 5 byte yer kaplar.
q 65.400 karakterden daha uzun karakterlerde 2. tip String’i kullanmak gerekmektedir.
q Degiskenlere deger atanmazsa degiskenler varsayilan degerleri alirlar.
Bunlardan baska degisken tipleri degisken vardir. Ilerideki konularda bunlari isleyecegiz.
Eger bir degiskenin, degisken türü belirtilmezse, bu degiskenin türü “Variant” denen ve 16 Bayt yer kaplayan bir tür olur. Variant en genel degisken türüdür. Birçok formatta veriyi saklayabilir. Fakat çok degisken kullandigimizda variant ile belirttigimiz (yada türünü belirtmedigimiz) degiskenler hafizada çok yer kaplarlar.
EKSIK Yaz. Stringse 16 + len(x) kaplar
Örnek;
Bir prosedür içinde 12 tane degisken kullandigimizi düsünün, eger bunlara herhangi bir degisken tipi belirlemezsek (yani variant olurlarsa)
Bu degiskenler hafizada 16 x 12 = 192 Bayt yer kaplar.
Fakat diyelim ki, bu kullanacagimiz degiskenlerin hepsinin içerecegi degerler; 0 ile 255 arasinda tam sayilar, o zaman yukaridaki tablodan gördügünüz gibi “Byte” adli degisken bizim için uygun olacaktir. Iste bu sekilde bütün degiskenleri “Byte” türü ile tanimlarsak, hafizadan her bir degisken için 1’er bayt yer isgal olur. Böylece
16 x 1 = 16 Bayt yer kaplar
Sonuç olarak;
192 – 16 = 176 Bayt
yerden tasarruf etmis oluruz. Degiskenler bölümünde belirttigimiz gibi, bir deger tutucuyu belirli bir sinirlama içinde tanimlamaya, degiskenlerin belirtilmesi deniyordu. Iste Byte degisken türü için bu aralik;
x = { x | 0 < x < 255, x є Z }
Integer degisken türü için
x = { x | -32.768 < x < +32.767, x є Z }
... gibi ifade edilebilir.