Rabu, 29 September 2010

Visual Basic 2010 a.k.a VB 10 a.k.a VBx

Visual Basic tidak dapat dipungkiri merupakan salah satu bahasa pemrograman yang digunakan untuk memproduksi aplikasi yang memiliki kepopuleran yang sangat tinggi. Visual Basic sendiri lahir pada tahun 1991. Ini berarti sampai saat ini, bahasa ini telah berusia 19 tahun (hem.. sebuah pencapaian yang luar biasa – bisa exist sampai saat ini).

VB 10 merupakan rilis pertama dari strategi co-evolution yang digencarkan oleh Microsoft saat ini. visi dari coevolution ini adalah untuk menyelaraskan agar baik VB atau pun C# diharapkan memiliki fitur yang seimbang.

VB 10 didesain untuk membantu developer lebih produktif lagi dengan menyediakan fitur-fitur yang bisa meringkas banyaknya kode program yang harus diketikkan pada sebuah program.

berikut ini beberapa fitur baru yang dikenalkan pada rilis ke 10 dari Visual Basic:

1. Implicit Line Continuation

perintah dalam VB adalah berorientasi baris, dimana sintaks yang digunakan kebanyakan menggunakan kata-kata dalam bahasa inggris sehingga mudah untuk dimengerti. tapi hal ini kadang kala menyebabkan programmer harus menuliskan perintah yang panjang. nah, selama ini untuk membuat sebuah perintah yang panjang agar dapat lebih mudah untuk dibaca tanpa perlu banyak melakukan scrolling layar, programmer akan memecah baris perintah tersebut menjadi beberapa baris perintah dengan memisahkan baris tersebut secara logic dengan menggunakan karakter underscore ( _ ). nah, di versi 10 ini, pemakaian karakter underscore tersebut menjadi optional untuk sebagian kasus karena compiler VB versi 10 saat ini sudah dapat membedakan apakah beberapa baris perintah tersebut merupakan sebuah rangkaian perintah tunggal atau merupakan beberapa perintah yang terpisah.

Contoh:

Code Pada VB 9:

Dim data() As Integer = _
New Integer() { _
1, _
2, _
3 _
}


Code pada VB 10:




Dim data() As Integer =

            New Integer() {


                1,


                2,


                3


            }




beberapa skenario di mana karakter underscore boleh ditiadakan adalah:



- setelah penulisan attribut <Extension()>



- setelah tanda ( (kurung buka) pada saat deklarasi method



- setelah tanda , (koma) pada penulisan parameter



- sebelum tanda ) (kurung tutup) pada saat deklarasi method



- setelah tanda = (sama dengan)



- setelah tanda <%= (tag pembuka untuk ekspresi embedded)



- setelah tanda & (ampersand) pada penulisan XML Literal



- sebelum tanda %> (tag penutup untuk ekspresi embedded)



- dan pada tanda-tanda seperti yang ditampilkan pada gambar berikut ini:



Implicit Line Continuation 



2. Statement Lambda



lambda secara sederhana dapat diartikan sebagai fungsi yang didefinisikan di dalam fungsi yang lain.



VB 9 mengenalkan lambda expressions dengan keyword Function




Dim cust() as Customer = ….



Array.FindAll(cust, Function(c) c.Country = “Indonesia”)




lambda expressions memberikan cara yang lebih ringkas dan kompak untuk mengekspresikan logic secara lokal tanpa perlu memecahnya menjadi beberapa method yang saling berkaitan. sebagai contoh, berikut ini adalah bentuk sample code yang sama seperti contoh di atas, namun tanpa menggunakan lambda expressions




Dim query = Array.FindAll(cust, AddressOf Filter)





Function Filter(ByVal c as Customer) As Boolean



     Return c.Country = “Indonesia”



End Function




tapi sayangnya, lambda expressions yang dikenalkan dan digunakan dalam VB 9 mengharuskan sebuah lambda expressions untuk mengembalikan sebuah nilai, sehingga untuk penggunaan seperti kasus berikut:




Array.ForEach(cust, Function(c) Console.WriteLine(c.Country)



 




akan menyebabkan terjadinya error seperti berikut:



'Compile error: "Expression does not produce a value."


Console.WriteLine adalah sebuah prosedur, sehingga tidak mengembalikan sebuah nilai, yang mana akan menyebabkan compiler membangkitkan pesan kesalahan. untuk deal dengan situasi ini, VB 10 kemudian mengenalkan Statement Lambdas, yaitu lambda yang dapat berisi satu atau lebih statement.



sehingga code yang error di atas dapat kita ubah menjadi:




Array.ForEach(cust, Sub(c) Console.WriteLine(c.Country)



 




code di atas dapat berjalan dengan baik.



contoh lain penggunaan statement lambdas:



Array.ForEach(cust, Sub(c)
Console.WriteLine("Country Name:")
Console.WriteLine(c.Country)
End Sub)


statement lambdas ini juga dapat digunakan untuk membangun Event Handler secara dinamis, seperti yang ditunjukkan pada contoh berikut.



AddHandler b.Click, Sub(sender As Object, e As EventArgs)
MsgBox("Button Clicked")
'Ketikkan code selanjutnya
End Sub


dan anda juga dapat mengkombinasikan statement lambdas ini dengan fitur relaxed delegates yang sudah tersedia di VB 9. (red. delegate adalah type safe pointer to functions, yang dapat digunakan untuk mengeksekusi beberapa method sekaligus). kombinasi ini menghasilkan signature event yang lebih sederhana seperti ditunjukkan pada code berikut ini:



AddHandler b.Click, Sub()
MsgBox("Button Clicked")
'ketikkan code selanjutnya
End Sub


relaxed delegate memungkinkan anda untuk menghilangkan parameter pada event handler.



VB 10 juga menambahkan support untuk multi-line function lambdas.



Dim query = cust.Where(Function(c)
'Return only customers that have not been saved
'insert more complex logic here
Return c.ID = -1
End Function)


aspek menarik lainnya dari statement lambdas ini adalah cara yang digunakan untuk beririsan dengan fitur anonymous delegates yang diperkenalkan pada VB 9. anonymous delegates terjadi ketika compiler VB meng-infers sebuah tipe delegate berdasarkan signature method dari sebuah function lambdas.



Dim method = Function(product As String)
If product = "Paper" Then
Return 4.5 'units in stock
Else
Return 10 '10 of everything else
End If
End Function

MsgBox(method("Paper"))


pada code di atas, compiler akan mengenerate sebuah delegate secara otomatis dengan bentuk seperti berikut ini:



Delegate Function $compilerGeneratedName$(product As String) As Double


ini yang disebut dengan anonymous delegate, karena delegate tersebut hanya kelihatan di sisi compiler, karena memang delegate tersebut digenerate oleh compiler sendiri, bukan pada code yang ditulis oleh programmer. perhatikan bahwa compiler meng-infers return type nya dengan tipe double. karena tipe ini yang paling dominan.



tapi kita juga diperkenankan untuk menuliskan return type dari anonymous delegate tersebut seperti bentuk berikut ini:



'Notice the "As Single"
Dim method = Function(product As String) As Single
If product = "Paper" Then
Return 4.5 'units in stock
Else
Return 10 '10 of everything else
End If
End Function


atau



Dim method As Func(Of String, Single) =
Function(product)
If product = "Paper" Then
Return 4.5 'units in stock
Else
Return 10 '10 of everything else
End If
End Function


3. Auto-Implemented Properties



dalam VB, properties adalah member dari class yang digunakan untuk mengexpose state dari object agar dapat diakses dari luar dari class yang bersangkutan. bentuk deklarasi properties yang digunakan sampai dengan VB 9 adalah seperti berikut ini:



Private _country As String
Property Country As String
Get
Return _country
End Get
Set(ByVal value As String)
_country = value
End Set
End Property


jika dilihat, 9 baris perintah di atas digunakan untuk membuat hanya satu buah properties. dengan penulisan seperti ini, jika kita harus mendeklarasikan banyak properties sekaligus, akan menyebabkan programmer harus mengetikkan kode program yang hampir mirip seperti di atas secara berulang-berulang. hal ini tentunya tidak efisien. nah, pada VB 10, dikenalkanlah fitur auto-implemented properties untuk mempermudah proses pembuatan properties seperti di atas menjadi berbentuk one line of code seperti code berikut ini:




Public Property Country As String



 




pada kasus ini, compiler akan secara otomatis mengenerate Getter, Setter dan Backing Fields. nama dari backing fields akan selalu dimulai dengan tanda underscore diikuti oleh nama dari property yang ada, dalam contoh ini akan menjadi _Country



anda juga bisa langsung menginisialisasikan sebuah nilai awal saat mendeklarasikan sebuah property seperti ditunjukkan pada contoh berikut:




Public Property ID As Integer = –1



 




dan walaupun sudah disediakan auto-implemented properties ini, anda juga masih bisa menggunakan cara deklarasi property dengan menggunakan cara yang disediakan oleh VB 9. hal ini diperlukan misalnya untuk property yang memerlukan proses yang kompleks seperti melakukan pengecekan.



4. Collection Initializers



ketika menggunakan object yang bertipe collection, untuk mempopulasi data inisialisasi ke dalam object yang bersangkutan biasanya digunakan dengan memanggil method Add dari object collection yang bersangkutan, seperti yang ditunjukkan pada contoh berikut:




Dim data As New List(Of String)



data.Add(“Satu”)

data.Add(“Dua”)


data.Add(“Tiga”)





tidak ada yang salah dari code di atas, namun kita harus melakukan proses populasi data dengan memanggil method Add secara berulang-ulang. nah, pada VB 10, dikenalkan sebuah fitur yaitu collection initializers yang mengizinkan anda untuk memberikan nilai inisialisasi ke object collection dengan lebih ringkas dan mudah, seperti yang ditunjukkan pada code berikut ini:




Dim data As New List(Of String) From {“Satu”, “Dua”, “Tiga”}



 




compiler VB secara otomatis akan memanggil method Add untuk mempopulasikan setiap data yang ada.



collection initializers dapat digunakan terhadap semua data type yang memenuhi requirement berikut ini:





  • dapat melakukan iterasi terhadap data type tersebut dengan menggunakan For Each statement. hal ini bisa dilakukan terhadap semua data type yang mengimplementasikan interface IEnumerable.




  • data type tersebut memiliki constructor default (constructor tanpa parameter) yang dapat diakses.




  • data type tersebut memiliki method yang bernama Add yang dapat diakses.




contoh lain:




Dim lookupTable As New Dictionary(Of Integer, String) From {

          {1, “One”},


          {2, “Two”},


          {3, “Three}


}




anda juga dapat menyediakan custom implementasi method Add dengan menggunakan extension method, seperti ditunjukkan pada contoh code berikut:



<Extension()>
Sub Add(ByVal source As IList(Of Customer),
ByVal id As Integer,
ByVal name As String,
ByVal city As String)

source.Add(New Customer With
{
.ID = id,
.Name = name,
.City = city
})
End Sub


method ini mengextend data type apa saja yang mengimplementasikan IList(Of Customer) dan kemudian mengizinkan anda menggunakan sintaks collection initializer seperti berikut:



Dim list = New List(Of Customer) From
{
{1, "Jon", "Redmond"},
{2, "Bob", "Seattle"},
{3, "Sally", "Toronto"}
}


collection initializers ini juga dapat anda gunakan pada saat anda menginisialisasikan sebuah nilai saat menggunakan auto-implemented properties.



5. Array Literals



VB 10 juga menyediakan cara pendekatan baru yang lebih memudahkan ketika anda bekerja dengan menggunakan array.



pada VB 9, array bisa dibuat dengan pendekatan seperti berikut:




Dim numbers() As Integer = New Integer() {1, 2, 3, 4, 5}



 




dengan menggunakan array literals, penulisan sintaks di atas bisa disingkat menjadi:




Dim numbers = {1, 2, 3, 4, 5}



 




array literal dibuat dengan meletakkan elemen yang akan dimasukkan ke dalam array dengan menggunakan tanda kurung kurawal, dan membiarkan compiler menginfers data type yang cocok untuk digunakan secara otomatis. untuk keperluan ini, harus dipastikan nilai dari Option Strict adalah On.



array literals juga dapat digunakan untuk array multi-dimensi dan jagged array, seperti yang ditunjukkan pada code berikut ini:




‘ 2-dimensional array

Dim matrix = {{1, 0}, {0,1}}



‘ jagged array

Dim jagged = {({1, 0}), ({0, 1, 2})}



 




6. Dynamic Language Runtime



7. Generic Variance



8. Improved Optional Parameters



9. Embed Interop Types



10. Multi Targeting



5 fitur baru selanjutnya (dari no. 6 s/d 10) akan kita bahas di kesempatan yang lain.



selain fitur-fitur baru yang dikenalkan pada VB 10, IDE VB  10 juga mengalami peningkatan kemampuan yang banyak. seperti:





  • Navigate To




  • Highlight References




  • Generate From Usage




  • Better IntelliSense (Substring matching, camel-case lookup, suggestion mode – usefull for “test first” style of development)




  • Multi-Monitor Support




  • Zooming




    Semoga Bermanfaat




      Rgds

      Adi

    Tidak ada komentar: