Visual Basic .NET ile gelen Yenilikler
Visual Basic0 Mesaj
●29 Görüntüleme
- ReadBull.net
- Programlama ve Yazılım
- Programlama Dilleri
- Visual Basic
- Visual Basic .NET ile gelen Yenilikler
-
26-09-2019, 01:12:34
"Değişimler ve Geliştirmeler"
-----------------------------------------------------------------------------------------------------
Soz Diziminde Yapılan Değişiklikler
Visual Basic'i .NET'in ortak dil tanımlamasına uydurabilmek, eskimiş ve kullanılmayan ozellikleri dilden atmak ve dili daha modern bir hale getirmek icin soz diziminde değişiklikler yapılmıştır. Şimdi bunların neler olduğuna bakalım.
-----------------------------------------------------------------------------------------------------
Default Metotların ve Ozelliklerin Kaldırılması
txtAdSoyad adındaki bir TextBox icin VB6'da aşağıdaki gibi bir ifade gecerliydi :
Kod:
adiSoyadi = txtAdSoyad
Burada adiSoyadi değişkenine txtAdSoyad metin kutusunun Text değeri atanmaktadır. Yani metin kutuları icin programcı tarafından aksi belirtilmediği takdirde varsayılan ozellik Text ozelliğidir. Yukarıdaki ifade daha anlaşılır olması icin şu şekilde de yazılabilir :
Kod:
adiSoyadi = txtAdSoyad.Text
VB.NET icin bu kullanımlardan ikincisi gecerli olduğu halde ilki gecerli değildir, cunku artık varsayılan (default) metotlar ve ozellikler kaldırılmıştır. Programcı neyi kullanmak istediğini tam olarak belirtmelidir.
Text ozelliğine benzer şekilde Field ozelliğinin kullanımında da tam yazım gerekmektedir. Value ozelliği de artık Selection List'ler icin varsayılan ozellik olmaktan cıkmıştır. Aşağıda VB6'da gecerli kabul edilen bir yazım şekli gorulmektedir :
Kod:
adiSoyadi = myRecordSet ("adSoyad")
Burada adiSoyadi değişkeninin icerisine myRecordSet adlı recordset objesinin adSoyad sahasındaki değer aktarılmaktadır. Bu kodun VB.NET'de calışabilmesi icin şu şekilde değiştirilmesi gerekir :
Kod:
adiSoyadi=myRecordSet.Fields("adSoyad").Value
-----------------------------------------------------------------------------------------------------
Set ve Let Gerektirmeyen Referanslar
Default metot ve ozelliklerin kaldırılmasının sebebi obje referansları tanımlamada set ve let kullanımının onlenmesidir. Aşağıdaki soz dizimi VB6 ve oncesi icin gecerlidir :
Kod:
Set txtYeniMusteri = txtEskiMusteri
Burada bir obje referansı ataması yapılmaktadır. Eğer Set kullanılmazsa obje referansı değil değer ataması (Text değerleri) yapıldığı varsayılır. Set ile derleyici bunun bir obje referansı olduğunu fark eder. Artık varsayılan ozelliklerin kalkmış olmasından dolayı Set ve Let kullanımına da gerek kalmamıştır. Aşağıda VB.NET icin gecerli olan bir obje referansı ataması gorulmektedir :
Kod:
txtYeniMusteri = txtEskiMusteri
-----------------------------------------------------------------------------------------------------
Class Ozelliklerindeki Soz Dizim Değişiklikleri
VB6 ve onceki iki surumunde sınıf yapıları icerisinde Get, Let ve Set olmak uzere uc ceşit prosedur tanımlanabiliyordu. Bunlardan en az birinin olması şarttı. VB.NET'de Let proseduru kaldırılmış, Get ve Set prosedurlerinin kullanım şekli değişmiştir. Let prosedurunun kaldırılmasının sebebi obje referansı ile değer atamaları arasındaki farkın default ozelliklerin kaldırılması sonucu acıkca belli olması ve bu nedenle Let'e gerek kalmamasıdır. Aşağıda Get ve Set prosedurlerinin kullanımına ilişkin bir ornek gorulmektedir :
Kod:
Private sifre as String Public Property sifrem As String Get sifrem = sifre End Get Set sifre = value End Set End Property
Get ve Set prosedurlerinin birlikte kullanılmasıyla programcının birinde bir değişiklik yapıp diğerini unutması engellenmiştir. Ayrıca Get ve Set prosedurlerinin birlikte kullanılması gerekmektedir. Get'i kullanıp Set'i kullanmamak (sadece okunur) ya da Set'i kullanıp Get'i kullanmamak (sadece yazılır) icin Property tanımlamasında ReadOnly ya da WriteOnly olarak belirtmek gerekir. Aşağıda ReadOnly ve WriteOnly ozellikler icin ornekler gosterilmiştir :
Kod:
Private sifre as String Public ReadOnly Property sifrem As String Get sifrem = sifre End Get End Property Public Property sifrem As String Set sifre = value End Set End Property
-----------------------------------------------------------------------------------------------------
Parantez Kullanma Zorunluluğu
VB.NET hicbir arguman belirtilmese dahi parantez kullanımını gerektirmektedir. Orneğin aşağıdaki kod VB'in eski versiyonları icin gecerlidir :
Kod:
MsgBox "Selam, Millet"
Bu kodun VB.NET icin gecerli olabilmesi icin parantez kullanılması gerekmektedir :
Kod:
MsgBox("Selam", MsgBoxStyle.Critical, "Millet")
Burada MsgBoxStyle.Critical ile ekrana kritik bir mesaj yazdırılacağı belirtilmektedir.
Parametreler Varsayılan Olarak ByVal'dır
VB6 ve onceki surumlerde bir arguman listesindeki elemanlar daima varsayılan bir ozelliğe sahiptiler. Fakat bu varsayılan değer integer, string ve boolean gibi asıl veri tipleri icin ByRef oluyor iken, object gibi asıl veri tiplerinin dışındaki veri tipleri icin ByVal olmaktaydı. Programcı asıl veri tiplerini kullanıyor iken ByVal olarak kendisi bir bildirimde bulunmadıysa program derlenirken hicbir hata olmamasına rağmen programın calışması sırasında sebebinin bulunması zor olabilen hatalarla karşılaşılabilyordu. ByRef olarak yapılan tanımlamalarda bir rutine verilen parametrelerdeki değişim rutinin dışına da yansımaktadır. VB.NET bu sorunu giderebilmek icin programcı tarafından belirtilmediği surece paramtreleri varsayılan olarak ByVal kabul eder.
-----------------------------------------------------------------------------------------------------
Yeni Tanımlama Şekilleri
Visual Basic'in değişken tanımlamalarında bazı gariplikler vardı fakat bu gariplikler VB.NET'de cozulmuştur. VB6'da farklı veri tipindeki değişkenlerin tek bir satırda tanımlanmasına izin veriliyordu. Orneğin Kod:
Dim baslik As String, sayac As Integer
Yukarıdaki kod VB.NET'de calışmayacaktır. Cunku VB.NET tek bir satırda sadece aynı veri tipine ait değişkenlerin tanımlanmasına izin vermektedir. Orneğin ;
Kod:
Dim baslik , adSoyad As String
Yukarıdaki kod VB6'da farklı bir şekilde calışacaktır. baslik değişkeni Variant olarak kabul edilecektir. VB.NET'de her ikisi de String kabul edilir. Değişkenlere tanımlama sırasında ilk değerler verilebilir :
Kod:
Dim yas As Integer = 22 Dim adi As String = "Tarık Ozkan" Dim ikramiye As Integer = birimucret * 30
-----------------------------------------------------------------------------------------------------
Dizi Tanımlamalarındaki Değişim
Tum diziler sıfır tabanlıdır ve tanımlama sırasında kullanılan sayı gercek uzunluğu verir. Aşağıda bir VB6 kodu verilmiştir :
Kod:
Dim musteriler(50) As String
Bu kod aslında 51 elemanlı bir dizi oluşturur. İlk musteri sıfır numaralı olan ve son musteri de ellinci olacak şekildedir. Visual Basic.NET'de durum farklıdır. Dizinin uzunluğu tanımlamadaki gibi 50'dir. İlk elemanı sıfırıncı ve son elemanı kırk dokuzuncudur. Musteriler(50)'ye yapılacak bir referans out-of-bounds hatasının cıkmasına sebep olacaktır.
Biz bu kitabı yazarken beta surumleri kullandık. Eğer gercek versiyonda da dizi tanımlamaları ve kullanımı bu şekilde olursa eski Visual Basic kodlarını .NET'e cevirirken hatalar cıkacaktır. Ayrıca VB kullanıcıları 1 tabanlı dizileri kullanmaya alışık oldukları icin yeni duruma alışana kadar hata yapmaları normaldir.
Değişken tanımlamalarında olduğu gibi dizilerde de tanımlama sırasında ilk değerlerin verilmesi mumkundur. Orneğin aşağıdaki dizi tanımlamasında dizinin tum değerleri tanımlama sırasında verilmektedir :
Kod:
Dim oyuncular(4) As String = ( "Necati" , " Kezban" , "Zekeriya" , "Mahmut" )
Oyuncular dizisinin elemanlarına referans tanımlarken oyuncular(0) ... oyuncular(3) şeklinde olmalıdır.
Dizi tanımlamalarında boş indeks kullanıp daha sonra redim ile kapasiteyi arttırma ortadan kaldırılmıştır. Diziler daima Dim ile tanımlanmalıdır. Redim sadece dizinin uzunluğunu değiştirmek icin kullanılabilir.
-----------------------------------------------------------------------------------------------------
Formların Yuklenmesi
Visual Basic formları kendilerine ilk referans tanımlandığında yukleniyorlardı. Visual Basic.NET'de formun yuklenmesi icin programcı tarafından bildirilmesi gerekmektedir. Aynen diğer objelerde olduğu gibi. Bir form modulunun de aslında normal bir sınıf olduğundan, farkının sadece formlara ait yetenekleri olması olduğundan onceki konularda bahsetmiştik. Bu kısa hatırlatmanın ışığı altında aşağıdaki koda baktığımızda bir formun aynen diğer objeler gibi yaratıldığını ve gosterildiğini gorebiliriz:
Kod:
Dim yeniForm As New Form3() yeniForm.Show()
Burada Form3 adında bir formun proje icersinde onceden yaratılmış olduğu varsayılmıştır. Bu kodun VB6'dan farkı parantezlerin kullanılmış olmasıdır.
-----------------------------------------------------------------------------------------------------
Bit İşlemleri
VB6'da bit operatorleri (And, Or, Xor ve Not) hem boolean hem de aritmetik işlemler icin kullanılıyordu. Aşağıdaki VB6 kodlarından ilki bit bazında aritmetik, ikincisi ise boolean işlem yapmaktadır :
Kod:
Dim ilkDeger As Integer Dim ikinciDeger As Integer ilkDeger = &H1E ' decimal karşığı 30 ikinciDeger = &H32 ' decimal karşığı 50 MsgBox (ilkDeger And ikinciDeger) 'ekrana 16 yazar
Kod:
Dim baslik As String = "yoo" Dim adi As String = "eren" If (Len(baslik) = 3) And (Len(adi) = 4) Then MessageBox.Show("eşitlik sağlandı") End If
İlk messagebox ekrana 16 yazdıracaktır, cunku 1E ve 32'nin AND'lenmesi sonucunun decimal karşılığı 16'dır. İkinci messagebox ekrana "eşitlik sağlandı" yazısını getirecektir, cunku AND'in solundaki ve sağındaki karşılaştırmaların sonucları doğrudur yani 1'dir.
Değişkenlerin Tanımlı Oldukları Alanlardaki Değişim
Visual Basic 6.0'da değişkenler prosedur icinde herhangi bir yerde tanımlanabilir ve prosedurun tamamında gecerlidir. Eğer değişken bir blok icinde tanımlanırsa bloğun dışında da değişkenin icerdiği değere erişilebilir. Orneğin bir loop, for ve if bloğu gibi. Aşağıda VB6'da yazılmış bir kod gorulmektedir :
Kod:
[B]Do Dim sayac As Integer sayac = sayac + 1 Loop While sayac