The True If Ternary Operator

Created at : Sep/16/2008  
1062 Views   0 Comments

Mungkin beberapa programmer diantara kita ada yang sering atau pernah menggunakan perintah IIF. Ya...sebuah perintah yang digunakan untuk mempersingkat statement If yang memiliki struktur If...Then...Else. Di VB 9.0 terdapat fitur baru yang serupa dengan perintah IIF yaitu If Ternary Operator. Penggunaannya sama dengan perintah IIF. Namun ada beberapa perbedaan yang saya pikir cukup signifikan juga kalau kita konsen terhadap performance dan Best Practice.

Untuk lebih jelasnya mari kita langsung lihat contoh penggunaanya pada code dibawah ini :

   1: Module IfTernaryOperator
   2: 
   3:     Private Function Dimarzio() As String
   4:         Return "Dimarzio Pickup!"
   5:     End Function
   6: 
   7:     Private Function SeymourDuncan() As String
   8:         Return "Seymour Duncan Pickup!"
   9:     End Function
  10: 
  11:     Private Function NoPlayer() As String
  12:         Return "Please select the player first!"
  13:     End Function

Kode di atas adalah fungsi biasa yang dibuat didalam sebuah Module. Kemudian saya buat contoh penggunaan perintah IIf :

   1: Sub Main()
   2:     Dim player = "Paul G"
   3:     Dim pickup = IIf(player.Equals("Paul G"), Dimarzio, SeymourDuncan)
   4:     Console.WriteLine(player & " uses {0}", pickup)
   5:     Console.ReadLine()

Coba kita perhatikan kode diatas. Perintah IIf diatas menggunakan 3 buah parameter. Parameter yang pertama merupakan kondisi yang akan di evaluasi. Parameter kedua merupakan prosedur yang akan dieksekusi ketika hasil evaluasinya bernilai True, sedangkan parameter yang ketiga sebaliknya, akan di eksekusi jika hasil evaluasi parameter pertama bernilai False. Mari kita lihat dahulu screen shot hasilnya :

Mari kita lihat IL yang dihasilkan dari kode IIf diatas :

Whoa...ternyata fungsi IIf itu tergantung pada library Microsoft.VisualBasic.dll yang membutuhkan vb runtime. Dan ternyata lagi, tipe data yang dikembalikan berupa object yang membutuhkan memory lebih besar dibandingkan dengan primitive data type lainnya. Disini saya menggunakan VB 9.0 dimana fitur Local Type Inference yang digunakan untuk mendeklarasikan variabel "pickup" dimana tipe data tersebut tergantung dari nilai yang diberikan pada variabel itu. Kalau kita rubah tipe data ketiga Function di atas, maka hasil dari "pickup" variabel tetap sebagai Object. Sekarang mari kita lihat contoh penggunaan If Ternary Operator yang baru terdapat di VB 9.0 :

   1: Dim player = "Nuno B"
   2: Dim pickup = If(player.Equals("Paul G"), Dimarzio, SeymourDuncan)
   3: Console.WriteLine(player & " uses {0}", pickup)
   4: Console.ReadLine()

Penggunaan parameter If ternary dengan IIf function sama. Hasilnya sebagai berikut :

Sekarang kita lihat IL yang dihasilkan oleh kode diatas :

Interesting! If ternary operator sudah tidak lagi bergantung pada vb runtime. Dan menariknya lagi, tipe data yang dikembalikan dari hasil eksekusi If ternary operator tersebut tergantung dari return value fungsi yang digunakan pada parameter pertama dan parameter kedua. Jadi kalau kita rubah ketiga fungsi diatas menjadi fungsi yang akan mengembalikan tipe data integer maka kode IL nya juga akan mengikuti tipe data tersebut. Satu lagi perbedaan yang menarik antara IIf function dan If ternary operator yaitu warna :)) ...IIf function warnanya hitam sedangkan If ternary operator warnanya biru ;))

If ternary operator juga dapat menggunakan hanya dua parameter yang dikenal dengan istilah "null-coalescing operator" seperti operator "??" yang ada di C#. Berikut contohnya :

   1: Dim pickup As String = Nothing
   2: pickup = If(pickup, NoPlayer)
   3: Console.WriteLine(pickup)
   4: Console.ReadLine()

Hasilnya :

Jika parameter yang digunakan hanya dua, maka apabila value parameter pertama bernilai Nothing program akan eksekusi prosedur yang terdapat pada parameter kedua. Namun apabila variabel "pickup" nya diisi maka hasilnya akan sesuai dengan nilai yang diberikan pada variabel tersebut. Kegunaan dari penggunaan If ternary operator dengan dua parameter ini yaitu apabila kita menggunakan Nullable Types.

So best practice nya, segera rubah IIf function yang mungkin anda tulis di VB sebelum VB 9.0 dengan If ternary operator jika sekarang anda hendak bermigrasi ke VB 9.0...

 


[Comments]

[Write your comment]
Name (required)
URL (optional)
Example : http://www.yulianmf.com  
Comment

POJS
Input code above below (Case Sensitif) :
About Me 
Rully Yulian MF
My Name is Rully Yulian Muhammad Firmansyah. I am an IT Trainer, IT Consultant and Application Developer spesializing in Microsoft .NET technology and SQL Server database. I live in Bandung, Indonesia. My hobby is to play Guitar. [Read More...]
Top Download 
Bagaimana caranya menginstal database ketika deploying sebuah aplikasi? : Downloaded 2231 times  
Change Group,Sort Order, Filtering By Date in Crystal Reports : Downloaded 2192 times  
Simple Voice Engine Application With Sound Player Class... : Downloaded 1523 times  
DataGridView Grouping : Downloaded 1243 times  
WinForms DataGrid Paging With SqlDataAdapter : Downloaded 1232 times  
Article Category 
Links 
Award 
Certifications 
MOS 2007
MCAS
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench
Native Enterprise - IT Training 
Native Enterprise Facebook Group 
My Facebook 
My LinkedIn 
Syndication (RSS 2.0) 
Powered By 
Native Enterprise News