Error Handling di Swift

Kapan pakai try, try?, try!

Muhammad Ridho K. Pratama
Ridho's Personal Note
2 min readApr 17, 2018

--

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 😄

--

--