Fitur VB9 (If Ternary Operator)

Halo, ini adalah posting kelima saya tentang fitur dari VB9 yaitu If Ternary operator, anda dapat melihat posting saya sebelumnya:

  • Implicitly typed local vaiable
  • Object initializer
  • Anonymous types
  • Nullable types

Pada VB versi sebelumnya anda pasti pernah menggunakan perintah IIF untuk penggunaan single IF

'penggunaan iif pada VB 
Dim bil1 As Integer = 999
Dim ket As String = IIf(bil1 Mod 2 = 1, "Ganjil", "Genap")
Console.WriteLine(ket) 'menghasilkan output Ganjil

Apakah ada yang salah dari kode diatas? memang tidak sih, outputnya benar dan sesuai yang kita harapkan. Tetapi sebenarnya IIF pada VB bukan merupakan built-in function tetapi hanya fungsi biasa yang dipanggil dari library. Seperti halnya regular fungsi maka ketika fungsi tersebut dipanggil maka semua argumen dalam fungsi tersebut akan dicek oleh VB compiler sebelum dijalankan.

Sub Main()
    Dim bil1 = 999
    Dim ket As String = IIf(bil1 Mod 2 = 1, Ganjil(), Genap())
End Sub
 
Function Ganjil() As String
    Return "Ganjil"
End Function
 
Function Genap() As String
    Throw New Exception("Error...")
    Return "Genap"
End Function

image

Jika kode diatas dijalankan maka akan menghasilkan error karna ada perintah Throw Exception pada function Genap(), meskipun hasil dari IIF diatas Ganjil() namun oleh Genap() juga dibaca oleh VB sehingga Throw Exception dipanggil. Jadi jika anda selama ini menganggap bahwa IIF sama dengan perintah IF biasa anda salah sangka :). Kode dibawah ini tidak sama dengan kode diatas

Sub Main()
   Dim bil1 = 999
   Dim ket = ""
   If bil1 Mod 2 = 1 Then
       ket = Ganjil()
   Else
       ket = Genap()
   End If
   Console.WriteLine(ket)
End Sub

Kode diatas tidak akan menghasilkan error ketika dijalankan, karena fungsi Genap() tidak dicek ketika IF dieksekusi. Ini juga sama dengan perintah IF Ternary pada VB9 (yang ini benar-benar ternary asli gak seperti IIF)

Sub Main()
    'Real IF Ternary pada VB 9
    Dim bil1 = 999
    Dim ket = If(bil1 Mod 2 = 1, Ganjil(), Genap())
    Console.WriteLine(ket) 'menghasilkan output Ganjil
End Sub

Kode diatas juga tidak akan menghasilkan error jika dijalankan karena menggunakan IF Ternary pada VB9. Dengan IF Ternary pada VB anda juga dapat menuliskan hanya 2 argumen dengan saja misal:

Dim nama As String = Nothing
Dim strnama = If(nama, "Kosong")
Console.WriteLine(strnama) 'outputnya Kosong
nama = "Erick Kurniawan"
strnama = If(nama, "Kosong")
Console.WriteLine(strnama) 'outputnya Erick Kurniawan
 
Dim bil1 As Integer? = Nothing
Dim nilai = If(bil1, -1)
Console.WriteLine(nilai)

Harap diperhatikan bahwa tipe data yang dihasilkan dari IF harus kompatibel dengan nilai yang dibandingkan, jika anda menulis kode sperti dibawah ini maka akan menghasilkan error

image

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s