[Link] >> Penanganan Kesalahan Dalam VB.
Net 2008
Pada saat anda mengembangkan aplikasi, anda pasti pernah menjumpai kesalahan
baik yang terjadi pada saat anda menuliskan kode, atau kesalahan yang disebabkan oleh
inputan dari user, karena itu perlu bagi anda untuk dapat menangani kesalahan-
kesalahan yang mungkin terjadi pada aplikasi anda. VB9 memiliki struktur exception
handling untuk menangani error, ini menggantikan Error Goto statement yang ada pada
VB6. Dengan menggunakan exception handling anda dapat memfilter error secara spesifik
dan mengembalikan error menggunakan exception object. Anda hanya perlu menaruh
kode yang akan dicek kesalahannya di kalang try dan meletakan exception di kalang
catch. Fitur baru pada VB9 untuk penanganan kesalahan diantaranya:
x Structure Exception Handling x Error Highlighting
x Type Safety
x Debugging Tools yang baru
Memahami Error
Pada aplikasi yang anda buat kesalahan bisa ditemukan dimana saja. Macam-macam
error yang mungkin terjadi ketika anda menulis program adalah:
Sintaks Error
Kesalahan ini adalah yang paling mudah untuk dideteksi, karena terjadi pada saat
design time (saat anda menuliskan sintaks program di editor). VB9 editor di Visual Studio
menyediakan pengecekan error yang sangat user friendly karena ketika anda salah
mengetikan sintaks maka Visual Studio langsung memberi tanda, atau membetulkannya
secara otomatis.
Compile Time Error
Compile Error dapat terjadi jika anda mengabaikan sintaks error yang muncul pada
saat anda menulis kode di Visual Studio atau ketika anda melakukan kesalahan tertentu
seperti mengoperasikan string untuk perhitungan matematika. Ini hanya akan terdeteksi
saat anda melakukan kompilasi. Semua error yang ditemukan akan dicatat di Output
Window dan Error List.
Runtime Error
Runtime Error akan terjadi pada saat program dijalankan. Ketika error terjadi maka
akan ada peringatan error kepada user dan kemudian program akan dihentikan secara
otomatis. Misalnya ada kode untuk membuka file, namun file tersebut tidak ada, atau
seharusnya input adalah tipe integer tapi anda
memasukan tipe string. Anda dapat menangani jenis error ini menggunakan exception
handling.
Logic Error terjadi dikarenakan kesalahan logika pemrograman, ini adalah jenis error
yang paling sulit untuk dideteksi. Untuk mendeteksi Logic Error anda dapat melakukan
test atau debugging pada kode anda.
Option Explicit, Option Strict, Option Infer
Jika Option Explicit Off maka kompiler VB akan mengijinkan anda untuk tidak
mendeklarasikan variable terlebih dahulu sebelum menggunakannya. Biarpun nampaknya
membantu tapi dapat menimbulkan kebingungan karena variable tidak dideklarasikan
sebelumnya. Kelemahan yang lain adalah tipe variable yang dicreate bertipe object,
sehingga terjadi proses boxing dan unboxing ketika nilai value type dimasukan. Maka
disarankan untuk mengatur Option Explicit menjadi On. Option Explicit On adalah
pengaturan default dari Visual Studio.
Pengaturan Option Strict Off berarti kompiler VB akan melakukan konversi narrowing
secara otomatis. Narrowing
konversi adalah konversi dari tipe data yang lebih besar ke tipe data yang lebih kecil. Misal
dari tipe long ke tipe integer. Untuk konversi dari tipe data yang lebih kecil ke tipe data yang
lebih besar disebut konversi widening (otomatis dilakukan oleh compiler walau Option Strict
On).
'Option Strict Off
'otomatis narrowing conversion Dim dblBil As Double = 12.54 Dim intBil As Integer =
dblBil MessageBox. Show( intBil)
'Option Strict On
'narrowing conversion dilakukan eksplisit oleh programmer Dim dblBil As Double = 14.45
Dim intBil As Integer = CInt(dblBil)
MessageBox. Show(intBil . ToSt ring)
Penggunaan Option Strict Off tidak disarankan karena dapat menimbulkan error pada
saat runtime. Misal anda memberikan nilai yang lebih besar dari tipe datanya.
Kode diatas jika dijalankan akan error karena variable shBil yang bertipe Short hanya
mampu menampung nilai maksimal 32000, jika nilai yang dimasukan lebih besar maka
akan terjadi error OverFlowException. Jika anda menggunakan Option Strict Off maka
kesalah ini tidak akan terdeteksi pada saat design time.
Option Strict Off juga mengijinkan anda untuk melakukan late binding. Late binding
adalah sebuah cara untuk menentukan jenis tipe data dari variable diakhir setelah variable
tersebut diberi nilai. Karena belum tahu tipe datanya maka variable tersebut bertipe Object.
'parameter pada function belum ditentukan tipe datanya
Function GetLuas(ByVal n1 As Object, ByVal n2 As Object) As Integer
Return n1 + n2
End Function
'menggunakan late binding
Dim luas As Integer = GetLuas(12, 34) MessageBox. Show( luas)
Function GetLuas() memiliki parameter yang bertipe object yang dapat diisi tipe data
yang diinginkan.
Karena beberapa masalah yang dapat ditimbulkan maka anda disarankan
menggunakan Option Strict On, namun pada kasus tertentu jika anda membutuhkan
late binding anda dapat mengubah setting Option Strict menjadi Off
Anda dapat menggunakan Visual Studio untuk melihat jalannya program yang
sedang anda buat, caranya:Untuk melihat jalannya program yang anda buat, anda
harus meletakan tanda breakpoint pada salah satu baris pada program anda. Untuk
menambahkan breakpoint caranya klik pada bagian kiri kode anda atau tekan F9.
1. Pada saat program di jalankan maka program akan berhenti sementara pada baris
yang anda tandai dengan breakpoint. Baris tersebut secara otomatis akan di
highlight dengan warna kuning.
2. Pada saat program di jalankan maka program akan berhenti sementara pada baris
yang anda tandai dengan breakpoint. Baris tersebut secara otomatis akan di
highlight dengan warna kuning.
3. Kemudian anda dapat melakukan pelacakan pada program anda baris per baris
dengan menekan tombol F11. Pada saat anda melakukan step into (F 11) maka
anda dapat mengetahui isi dari setiap variable per baris ketika program sedang
berjalan.
Perintah-perintah pada Breakmode
Pada saat program dalam keadaan pause, anda dapat menjalankan perintah sebagai
berikut:
x Toggle Breakpoint : untuk memberi tanda pada bagian program yang akan
diberi breakpoint.
x Step Into (F11) : perintah ini digunakan untuk mengecek baris per baris dari
program.
x Step Over (F 10) : perintah ini mirip dengan Step Into yang digunakan untuk
mengecek program perbaris bedanya Step Over tidak mengecek kode yang
berada pada kalang subroutine dan function.
Anda dapat melihat baris kode yang diberi breakpoint dengan cara menggunakan
breakpoint window. Klik pada menu Debug Windows Breakpoints
Exception Handling
Ketika anda membuat program tidak semua kesalahan dapat anda tangani karena
mungkin kesalahan tersebut bukan dikarenakan anda salah menuliskan kode namun dari
inputan user, kondisi jaringan, atau faktor lain diluar kode anda. Misal program anda
mencoba membaca file sedangkan file tersebut sudah dihapus maka akan menyebabkan
program error.
Pada VB9 anda dapat menggunakan exception handling untuk mengecek apakah
kode blok yang anda buat menimbulkan kesalahan. Misalnya anda mempunyai program
sebagai berikut:
Class Mahasiswa
Public nim As String End
Class
Module Module1
Sub CobaKesalahan()
Dim objMhs As Mahasiswa = Nothing
[Link] = 12 End Sub
Sub Main()
'jika dijalankan akan terjadi error CobaKesalahan()
End Sub
End Module
Program diatas jika dijalankan akan menyebabkan terjadinya error
[Link] karena object objMhs belum dibuat tapi sudah diberi nilai.
Error tersebut akan membuat aplikasi anda terhenti.
Anda dapat menggunakan struktur Try Catch untuk menangkap error yang terjadi dan
memberi solusi terhadap error tersebut. Program yang akan anda periksa dapat dimasukan
kedalam blok Try, sedangkan jika terjadi kesalahan dapat ditangkap atau dideteksi di kalang
Catch.
Try
CobaKesalahan ()
Catch ex As Exception
[Link]("Kesalahan : " & [Link]) End Try
Jika method CobaKesalahan() dijalankan dan menyebabkan error maka akan dicek
errornya di kalang Catch untuk ditampilkan atau ditangani lebih lanjut.
Anda juga dapat menggunakan blok Finally yang adapat dituliskan setelah blok Catch.
Finally adalah blok yang pasti akan dijalankan meskipun tidak terjadi error. Kode yang
dimasukan kedalam blok Finally biasanya digunakan untuk menutup koneksi ke resource
seperti database atau text.
Dim baris As String
Dim myFile As [Link] = Nothing Try
myFile =System. [Link]("tidakada .txt")
baris = [Link]()
Catch ex As Exception
[Link]("Error :" & [Link])
Finally
'jika filestream terbuka akan ditutup disini
If Not myFile Is Nothing Then
[Link]()
End If
End Try
Pada contoh diatas jika object myFile ada isinya maka ketika sampai pada kalang
Finally akan ditutup koneksinya dengan resource file. Jika file tidak ada maka akan
ditampilkan errornya pada kalang Catch.
Menangkap Lebih Dari Satu Kesalahan
Class Exception adalah base class dari semua Exception yang ada pada .NET. Jenis
error yang mungkin terjadi ketika anda menulis program amat sangat banyak, pada .NET
setiap error yang terjadi mempunyai nomor error yang berbeda dan anda dapat
mengetahuinya dengan jelas, misal pada saat anda membuat aplikasi yang terhubung ke
database, kemungkinan ditemukan banyak error mulai dari kegagalan koneksi, primary
key yang terduplikasi, dll. Untuk menangani kesalahan yang terjadi secara spesifik anda
dapat menggunakan lebih dari satu kalang Catch.
Dim strConn = "Data Source=Erick-PC;Integrated Security=SSPI; Initial
Catalog=Northwind"
Dim conn As New SqlConnection(strConn)
Dim sql = "insert into Customers(CustomerId) values('ALFKI')"
Dim cmd As New SqlCommand(sql, conn)
Try
conn .Open()
cmd. ExecuteNonQuery()
Catch sqlEx As SqlException
If [Link] = 515 Then
[Link]("Kolom CustomerName tidak boleh NULL..")
ElseIf [Link] = 2627 Then [Link]("Kode Customer sudah ada...")
Else
[Link]("Error : " & [Link] & " Number :" & [Link])
End If
Catch ex As Exception
[Link]("Error : " & [Link])
End Try
Pada kode diatas anda dapat menggunakan beberapa kalang Catch untuk
menangkap error yang lebih spesifik. Misal untuk menagkap error yang terjadi karena
koneksi atau kesalahan perintah query anda dapat menggunakan SqlException. Dengan
menggunakan SqlException anda dapat mengambil error number dari kesalahan yang
mungkin terjadi menggunakan properti Number. Misal dari program diatas untuk
kesalahan duplikasi primary key error numbernya 2627 sedangkan untuk kesalahan
kolom tidak boleh bernilai NULL error numbernya 515. Dengan mengetahui kesalahan
secara spesifik anda dapat memberi error handler satu persatu untuk kesalahan tersebut.
Mengapa Tidak Menggunakan On Error Goto
Sebenarnya VB9 masih mensupport penggunaan perintah On Error Goto untuk
backward compatibility dengan VB6, namun ada beberapa alasan yang menyebabkan
penggunaan On Error Goto tidak disarankan yaitu:
x Spaghetti Code : jika anda ingin menghandle banyak error pada VB6 maka anda
harus menuliskan banyak statement On Error Goto yang akan tercampur dengan logic
program anda yang lain. Ini akan sangat menyulitkan dalam pembacaan program.
x Single Error Object : VB6 hanya memiliki sebuah object untuk menghandle error yaitu
object Err jadi sulit sekali untuk menangkap beberapa error secara spesifik untuk
ditangani.
x Batasan Bahasa : object Exception ada didalam .NET Framework sehingga didukung
semua bahasa yang messuport .NET. Anda dapat throw exception menggunakan VB9
dan catch exception menggunakan C#.
x Keterbatasan Informasi : Errobject pada VB6 tidak mempunyai cukup informasi tentang
error yang terjadi.
Tipe Exception Pada VB9
Jika anda ingin tahu jenis exception apa saja yang mungkin terjadi ketika menulis
kode anda dapat menampilkan Exception Window, caranya klik pada menu Debug pilih
Exceptions, maka akan tampil window berikut.
Throw Exception
Jika anda membuat class maka anda harus melakukan throw exception jika terjadi
kesalahan pada kode di class tersebut. Untuk itu gunakan keyword Throw. Perhatikan
kode dibawah ini:
Public Class Mahasiswa
Private _nim As String
Public Property Nim() As String
Get
Return _nim
End Get
Set(ByVal value As String)
If [Link] <> 8 Then
Throw New Exception("Panjang Nim tidak boleh lebih dari 8 karakter")
Else
_nim = value
End If
End Set End Property End Class
Pada class Mahasiswa akan dilakukan pengecekan apakah panjang dari nilai yang
dimasukan kedalam fields Nim 8 karakter, jika lebih atau kurang dari 8 karakter maka
class tersebut akan melempar kesalahan. Anda dapat mnangkap kesalahan yang dilempar
oleh class Mahasiswa dengan cara:
Dim objMhs As New Mahasiswa
Try
[Link] = "220023211"
Catch ex As Exception
[Link]("Error : " & [Link]) End Try
UnhandledException Event
Jika aplikasi anda gagal menangkap exception yang terjadi maka aplikasi anda akan
berakhir. Seperti yang sudah kita bahas diatas anda dapat menggunakan structure
exception handling dan melakukan debugging pada kode anda. Meskipun anda sudah
sangat teliti namun kemungkinan error yang tidak diduga masih dapat terjadi. Untuk
pertahanan terakhir terhadap error anda dapat memanfaatkan event UnhandledException.
Untuk menambahkan event UnhandledException double click folder MyProject pada
solution explorer pilih Application tab klik pada tombol View Application Event pada
project properties window kemudian pada drop-down list pilih event
UnhandledException. Maka Visual Studio akan menggenerate method event handler,
masukan kode untuk menghandle kesalahan pada method tersebut.
Private Sub MyApplication_UnhandledException(ByVal sender As Object, ByVal e As
Microsoft .VisualBasic .ApplicationServices . UnhandledExceptio nEventArgs) Handles
[Link]
[Link]("Kesalahan ini tidak dapat dihandle
oleh aplikasi anda", [Link])
If TypeOf [Link] Is ApplicationException Then
[Link] = False
End If
End Sub
Untuk mencoba program diatas jalankan .exe dari program tersebut (bukan dari
visual studio). Jika terjadi error yang tidak dapat ditangani oleh kode yang anda buat
dalam aplikasi anda maka akan muncul pesan diatas dan program akan diakhiri.
Sumber : Migrasi VB 6 ke [Link]