Pada artikel kali ini saya akan membahas beberapa fitur baru dari sisi
language untuk bahasa VB 10 Beta 1. Adapun beberapa language fitur yang akan
dibahas disini yaitu : Array Literals, Collection Initializer, Implicit Line
Continuation, Auto Implemented Properties and Property Value Initialization,
Multiline Lambda Function and Sub Lambdas.
Penjelasan dari fitur-fitur baru tersebut dituliskan didalam code
comment.
1. Implicit Line Continuation
'//Penggunaan underscore di VB digunakan untuk memecah
'//kode program menjadi beberapa baris
'//Pada VB 10 penggunaan underscore ini dihilangkan
'//untuk kondisi-kondisi tertentu, fitur ini disebut dengan
'//Implicit Line Continuation
'//kondisi dimana fitur ini dapat digunakan yaitu :
'1. Setelah attribute
'2. Setelah koma
'3. Setelah titik
'4. Setelah binary operator
'5. Setelah LINQ query clause
'6. Setelah a (, {, or <%=
'7. Sebelum a ), }, or %>
'//Implicit Line Continuation setelah penggunaan Attribut
<System.ComponentModel.Browsable(True)>
<System.ComponentModel.Category("Roel's Category")>
Public Property GetColor As System.Drawing.Color = Color.Azure
'//Implicit Line Continuation setelah penggunaan koma, (, dan )
Private Function FuncWithImplicitLineContinuation(
ByVal teks As String,
ByVal title As String
) As DialogResult
Return MessageBox.Show(teks, title, MessageBoxButtons.YesNo,
MessageBoxIcon.Question
)
End Function
Private Sub AnotherImplicitLineContinuation()
'//Implicit Line Continuation setelah LINQ query clause, {, dan }
Dim bilGenap =
From num In
{
1,
2,
3
}
Where num Mod 2 = 0
Select num
'//Implicit Line Continuation setelah <%=, %>, {, dan }
Dim bookList As List(Of Book) = New List(Of Book) From
{
{1, "Visual Basic 10"},
{2, "Visual C# 4.0"}
}
Dim itsEasyToCreateXMLFileUsingXMLLiterals =
<Books>
<%=
From book In bookList
Select <Book ISBN=<%=
book.ISBN
%>>
<Title><%=
book.Title
%></Title>
</Book>
%>
</Books>
End Sub
2. Array Literals
Private Sub btnArrayLiterals_Click() _
Handles btnArrayLiterals.Click
'//deklarasi array di vb 9.0 (Option Infer On) :
Dim arr1() = New Integer() {1, 2, 3}
Dim arr2(,) = New Integer(,) {{1, 2}, {3, 4}}
'//deklarasi array dengan menggunakan
'//array literals di vb 10 (Option Infer On) :
Dim arr3 = {1, 2, 3}
Dim arr4 = {{1, 2}, {3, 4}}
End Sub
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
3. Auto Implemented Properties and Property Value Initialization
Public Class CustomerInPreviousVB
Private mID As Integer
Public Property IdNumber As Integer
Get
Return mID
End Get
Set(ByVal value As Integer)
mID = value
End Set
End Property
End Class
Public Class CustomerInVB10
'//auto implemented property di vb 10
'//tidak dapat menggunakan input parameter
'//dan juga harus bersifat read dan write
Public Property IdNumber As Integer
'//auto implemented properties
'//dapat diberi nilai default
'//ketika diinisialisasi
Public Property GetRandomNumber As Integer =
New Random().Next(1, 10)
End Class
Public Class GetOrder
Public Property ProductName As String
Public Property Quantity As Integer
End Class
Public Class Book
Public Property ISBN As Integer
Public Property Title As String
End Class
4. Collection Initializer
Extend method Add Generic List untuk class GetOrder dan class Book di atas
:
Imports System.Runtime.CompilerServices
Module Module1
<Extension()>
Sub Add(ByVal list As List(Of GetOrder),
ByVal ProdName As String,
ByVal Qty As Integer)
list.Add(New GetOrder With {.ProductName = ProdName,
.Quantity = Qty})
End Sub
<Extension()>
Sub Add(ByVal list As List(Of Book),
ByVal isbnNumber As Integer,
ByVal bookTitle As String)
list.Add(New Book With {.ISBN = isbnNumber,
.Title = bookTitle})
End Sub
End Module
Private Sub btnCollInit_Click() _
Handles btnCollInit.Click
'//collection initializer memungkinkan untuk memberikan
'//nilai default value object collection dengan
'//satu atau single expression
Dim intList = New List(Of Integer) From {1, 2, 3}
Dim bookList = New Dictionary(Of Integer, String) From
{
{1, "Exploring VB 10"},
{2, "Exploring C# 4.0"}
}
'//collection dari class dimana method Add
'//dari generic List sudah di extend di Module
Dim orderList = New List(Of GetOrder) From
{
{"Mouse", 10},
{"Keyboard", 5},
{"Infocus", 2}
}
End Sub
5. Multiline Lambda Function and Sub Lambdas
Asumsikan sebuah file Books.xml dengan struktur dibawah ini :
<?xml version="1.0" encoding="utf-8" ?>
<Books>
<Book ISBN="1">
<Title>Visual Basic 10</Title>
</Book>
<Book ISBN="2">
<Title>Visual C# 4.0</Title>
</Book>
<Book ISBN="3">
<Title>VSTS 2010</Title>
</Book>
</Books>
Private Sub btnMultilineLambdas_Click() _
Handles btnMultilineLambdas.Click
'//lambda function di vb 9.0
Dim bilGenap1 = Function(num As Integer) num Mod 2 = 0
Dim isGenap1 = bilGenap1(2)
Dim visualBooks1 = Function(xdoc As XDocument) xdoc...<Book>.Where(
Function(elem) elem...<Title>.Value.ToLower.Contains("visual"))
'//eksekusi lambda function
Dim books1 = visualBooks1(XDocument.Load("../../Books.xml"))
'//multiline lambda function di vb 10
Dim bilGenap2 = Function(num As Integer)
Return num Mod 2 = 0
End Function
Dim isGenap2 = bilGenap2(2)
Dim visualBooks2 = Function(xdoc As XDocument)
Return From elem In xdoc...<Book>
Where elem.<Title>.Value.ToLower.Contains("visual")
Select elem
End Function
'//eksekusi lambda function
Dim books2 = visualBooks2(XDocument.Load("../../Books.xml"))
End Sub
Private Sub btnSubLambdas_Click() _
Handles btnSubLambdas.Click
'//vb 9 hanya mengijinkan untuk membuat lambda function
'//yang mengembalikan sebuah value, artinya tidak menyediakan
'//fitur untuk membuat Sub Lambda
'//error di vb 9.0 (doesn't produce a value)
'Array.ForEach({1, 2, 3}, Function(num) IIf(num mod 2 = 0,
' Console.WriteLine("Genap"),
' Console.WriteLine("Ganjil")
' )
'//vb 10 memiliki fitur baru yaitu
'//Sub Lambda
Array.ForEach(
{1, 2, 3},
Sub(number)
If number Mod 2 = 0 Then
Console.Write(number.ToString)
End If
End Sub
)
End Sub
Happy coding with new taste of VB 10 :)…post berikutnya masih akan membahas
language fitur lainnya untuk VB 10 Beta 1 ini.