İlk bakışta Visual Basic 10 Yenilikleri!

0 dakikada yazıldı

10727 defa okundu

Düzenle

Visual Studio 2010 ve .NET Framework 4.0 CTP'lerinin
yayınlandığı bugünlerde iki yol sonra karşımıza çıkacak yazılım
teknolojilerine yön verme ve inceleme adına heyecanlı günler yaşadığımı
itiraf edebilirim.

Visual Studio 2008 ve .NET Framework 4.0 yeni logoları.
Visual Studio 2008 ve .NET Framework 4.0 yeni logoları.

Tüm bu yenilikler arasında tabi ki Visual Basic'in de artık 10'uncu
sürümü ile karşı karşıyayız. Bu yazıa şu an yayında olan CTP üzerinden
yola çıkarak VB 10 ile beraber gelen yenilikleri inceleyeceğiz.

Statement Lambda

Lambda'lara az çok LINQ ile beraber alışmıştık. VB 10 ile beraber çok
ilginç ve bir o kadar da güzel bir özellik geliyor. Ama gelin bunun
öncesinde VB 9 ile neler yapardık bir göz atalım.

[VB9]

Public Class Form1

 

    Private Sub Form1_Click(ByVal sender As Object,
ByVal e As System.EventArgs)

        MsgBox("Burada")

    End Sub

 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

        AddHandler Me.Click, AddressOf Form1_Click

    End Sub

End Class

Gördüğünüz gibi basit bir şekilde Form'un Load durumunda dinamik
olarak yine formun Click event'ını bir Sub'a bağlıyoruz.
Böylece artık forma tıklandığında "Burada" mesajı gösterilecek. Tüm
bunu yapmak için, yani dinamik event bağlamak için gidip ayrı bir
yerde Sub yazmamız ve sonra da AddressOf ile bağlamamız
gerekiyordu. Oysa artık satır için Sub var :)

[VB10]

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

        AddHandler Me.Click, Sub()

                                                     MsgBox("Burada")

                                            End Sub

    End Sub

End Class

Nasıl? Güzel değil mi? Satır içi Sub'ımızı yazdık bitti. Bu işlevselliği
AddressOf'u kullandığınız her yerde kullanabileceğinizi düşünürseniz
gerçekten süper! Peki ya Function'lar? İşte size satır içi Function
kullanımı.

[VB10]

        Dim Fonksyon = Function(x As Integer)

                                          
Return
x * 2

                                  End
Function

        MsgBox(Fonksyon(2))

Yukarıdaki kod içerisinde doğrudan Function'ımızı kodun içinde satır içi
yazarak tanımlıyoruz ve sonrasında da rahatlıkla Invoke işlemini
gerçekleştirebiliyoruz.

Coşmuş Type Inference

Type Inference'a zaten alışkın durumdayız. VB10 ve VS10 ile beraber bir
adım daha ileriye gidiliyor. Örneğin aşağıdaki gibi bir değişken
tanımında değişkenin bir Array olduğunu veya ne Array'i olduğunu
belirtmenize gerek kalmıyor.

Type Inference'ın bu kadarı :)
Type Inference'ın bu kadarı :)

Unutmayın bu şekilde tanımlamalar performans kaybına neden olmaz.
Compiler Compile Time'da gerekli kodları üretecektir.

PLINQ

Parallel LINQ aslında VB'ye özel bir konu değil fakat VS10 ve VB10 ile
beraber de geldiği için hızlıca bahsetmek istiyorum. Adından da
anlaşılacağı üzere PLINQ'de çalıştırılan sorguların kendi içlerinde
birden çok işlemcide çalıştırılmak üzere hazırlanmış durumdalar. Gelin
hemen aşağıdaki koda bir göz atalım.

[VB10]

       Dim sayilar = {10, 20, 30, 40}

 

        Dim XML = <Sayilar>

                             <%= From Inc In sayilar.AsParallel

                                     
Select
<Sayi><%= Inc %></Sayi> %>

                           </Sayilar>

AsParallel metodu otomatik olarak PLINQ kullanılmasını sağlıyor.
Normal şartlarda sırası ile 10, 20, 30, 40 sayılarını alırken bu şekilde
AsParallel olarak sorgumuzu çalıştırdığımızda 20, 10, 30, 40 gibi
bir sonuç elde ediyoruz. Bunun nedeni işlemin paralel bir şekilde
çalıştırıldıktan sonra sonucun bize döndürülüyor olması. Bu ufak detay
bile aslında PLINQ'in kullanılabileceği ve kullanılamayacağı noktalara
karar vermek için yeterli sayılabilir.

Add metodunu defalarca kullanmaktan kurtulunu!

Bu özelliğe başlık bulmakta zorlandığımı sanırım farkına vardınız.
Düşünün ki elimizde bir List var ve bu List içerisinde birden
çok Item eklememiz gerekiyor. Normal şartlarda her bir Item'ı
yaratarak tek tek Add metodunu çağırırdık.

[VB9]

Dim Liste As New
List(Of String)

Liste.Add("Ahmet")

Liste.Add("Mehmet")

Peki VB10 tarafında neler yapabiliriz? Yeni bir Keyword'ümüz var :
From

[VB10]

 Dim Liste As New
List(Of String) From {"Ahmet", "Mehmet"}

Aslında arka planda çalışan yapı doğrudan dizi içerisindeki bir Item
için Add metodunu çağırmaktan farklı değil. Örneğin elimizde özel
bir sınıfın listesi olsaydı aynı şekilde o sınıftan da objeler yaratarak
from ile listeye ekleyebilirdik.

[VB10]

        Dim Liste As New
List(Of Adam) From {

            New Adam() With {.Adi = "Ahmet", .Soyadi = "Hebe"},

            New Adam() With {.Adi = "Mehmet", .Soyadi = "Hebe"}}

Örnek kodumuzdaki List bir Adam List'i olduğu için burada
önemli olan List sınıfının Add metodunun Adam tipinden
değişken istiyor olması. Sırasıyla yaratarak bir array olarak veriyoruz.
İsterseniz Adam tipinden List'elerin Add metoduna
Overrides keywordü ile bir alternatif eklemek için
ExtensionMethod'ları da kullanabilirsiniz.

[VB9]

Module Module1

    <Runtime.CompilerServices.Extension()>

    Sub Add(ByVal x As
List(Of Form1.Adam), ByVal Adi As String,
ByVal soyadi As String)

        x.Add(New Form1.Adam() With {.Adi = Adi, .Soyadi = soyadi})

    End Sub

End Module

VB9'da tanıştığımız Extension Method'lardan bir adet tanımlayarak
Adam tipinden bir Liste oluşturulduğunda bu objelerin bir
Add metodlarının olacağını ve Adi, Soyadi olarak
String'ler alacağını tanımlıyoruz. Extension Method içerisinde de bu
bilgileri alıp yeni bir Adam yaratıp listeye ekliyoruz. Böylece
artık elimizdeki listeye Adam eklemek için Add metodunu
çağırırken iki adet String verip bir Adam eklenmesini de
sağlayabildik. Ama aslında bu Add metodunu da biz değil From
keyword'ü kullanacak.

[VB10]

        Dim Liste As New
List(Of Adam) From {

            {"Ahmet", "Hebe"},

            {"Mehmet", "Hebe"}}

Böylece artık yukarıdaki kodumuzda doğrudan bilgileri vererek her
seferinde New ile obje yaratmadan da istediğimiz kadar Adam
ekleyebiliriz.

Property tanımlamaları

C#'dan en çok kıskandığım özelliklerden biri Get ve Set'lerin
kısaltılmasıydı. Çoğu zaman Property tanımlarken aslında Get ve Set
kodlarını değiştirmiyoruz. Her ne kadar VS içerisinde kısa yolları
kullanarak bu kodları yazmıyor olsak da maalesef biz yazmamış olsak da
projemizdeki her satır kodun bir gün bir bug olarak karşımıza çıkma
ihtimali var :)

[VB9]

Private PAdi As String
= "Varsayılan"

Public Property Adi() As String

    Get

        Return PAdi

    End Get

    Set(ByVal value As String)

        PAdi = value

    End Set

End Property

"Eskiden" kelimesini kullanmak için daha erken olsa da maalesef
Property'leri VB9'da yukarıdaki şekilde tanımlıyorduk.

[VB10]

        Public Property Adi As String
= "Varsayılan"

Sanırım bu kodun üzerine daha fazla söz söylemeye gerek yok.

Son sürpriz!

Yukarıdaki kodlar dikkatinizi çekmediyse ufak bir ipucunda buluniyim.
Tek satırda yazılması gereken kodları çoklu satırlı olarak yazarken bir
değişiklik görebiliyor musunuz?

[VB9]

        Dim Liste2 As New
List(Of Adam) From { _

            {"Ahmet", "Hebe"}, _

            {"Mehmet", "Hebe"}}

[VB10]

        Dim Liste As New
List(Of Adam) From {

            {"Ahmet", "Hebe"},

            {"Mehmet", "Hebe"}}

Benim sanırım en çok sevindiğim gelişmelerden biri bu oldu. Artık uzun
uzun tek satırda kod yazmak zorunda değiliz veya her satır atlamak
istediğimizde _ alt çizgi ile alt satıra geçme zorunluluğu da yok!
C#'dan en çok kıskandığım özelliklerden biri de buydu.

VB kolayın kullanımını arttırarak kuvvetli bir dil olarak var olma
yolunda tam gaz devam ediyor. Gelişmeler çok sevindirici. Bakalım 2010'a
kadar karşımıza çıkacak diğer CTP'lerde neler olacak.

Hepinize kolay gelsin.