Error Handling di Swift
Kapan pakai try, try?, try!
Seringkali, ketika ada error di sebuah aplikasi, ada 2 kemungkinan yang terjadi. Pertama, crash tanpa permisi, lalu yang kedua aplikasi tidak crash, dan muncul pemberitahuan ke pengguna bahwa aplikasi sedang bermasalah. Tentunya, kita tidak ingin kemungkinan yang pertama itu terjadi kan?
Penyebab aplikasi crash
Di dunia iOS development, penyebab crash seringkali disebabkan oleh developer yang menulis kode program yang tidak safe, misalkan force casting, force unwrapping optional value, tidak sengaja membuat circular dependency antar objek yang keduanya sama-sama memiliki strong reference, sehingga terjadi retention cycle yang menyebabkan memory leak, maupun error handling yang kurang baik. Cara mencegahnya adalah salah satunya adalah melakukan error handling dengan baik.
Mendefinisikan tipe error di Swift
Di Swift, kita bisa mendefinisikan berbagai macam tipe error dengan mengimplementasikan protocol Error
. Berikut adalah contoh pemodelan ketika mesin ATM sedang mengalami error.
Penggunaan enumerasi sebagai pendefinisian error di Swift memudahkan kita untuk memodelkan berbagai macam kasus ketika error terjadi beserta dengan informasi tambahan yang biasanya diletakkan pada associated value pada tiap case
pada enumerasi.
Melemparkan error
Jika kita memiliki suatu fungsi yang dapat melemparkan error (ditandai dengan throws
), kita dapat melemparkan error yang kita inginkan dengan kata kunci throw
.
Bagaimana caranya melakukan error handling?
Di Swift, kita akan menemukan 3 keyword ketika kita berurusan dengan suatu kode program yang dapat throw error.
Ketiga keyword tadi adalah: try
, try?
, dan try!
.
Nahloh bedanya apa?
Penggunaan keyword try
biasanya dipadukan dengan blok do ... catch
. Blok do ... catch
digunakan untuk menangani error yang dilemparkan oleh suatu fungsi yang dapat melemparkan error. Simak contoh kode dibawah.
Dengan blok do ... catch
kita dapat menangani error sesuai dengan error yang dilemparkan fungsi yang dijalankan didalam sebuah blok do
diatas. Ketika ada statement yang ada di blok do
melemparkan error, maka ia melanjutkan eksekusi ke blok catch
yang sesuai dengan error yang dilemparkan.
Sebagai contoh, ketika baris 6 melemparkan ATMError.transactionError
, maka yang terjadi adalah melanjutkan eksekusi ke baris 11.
Keyword try?
disebut sebagai optional try. Keyword ini memungkinkan kita untuk mengabaikan error jika terjadi error, dan hasil balikannya hanya berupa nil
jika terjadi error.
Yang berbahaya adalah ketika kita memakai try!
. Ia akan menghasilkan crash ketika error dilemparkan. Gunakan ini jika kalian benar-benar yakin bahwa tidak akan ada error yang dilemparkan.
Kesimpulan
Ketiga keyword tadi berguna untuk berurusan dengan sebuah fungsi yang bisa melemparkan error. Pesan moralnya adalah, jangan pernah gunakan try!
jika tidak yakin akan konsekuensi yang mungkin terjadi 😄