Eksepsi #
Exception adalah kondisi yang tidak diinginkan atau kesalahan yang terjadi selama eksekusi program. Dalam Kotlin, seperti dalam bahasa pemrograman lainnya, penanganan exception adalah bagian penting untuk membuat aplikasi yang tangguh dan bebas dari crash yang tidak diinginkan.
Kotlin menggunakan mekanisme penanganan exception yang mirip dengan Java, di mana exception dapat ditangani menggunakan blok try
, catch
, dan finally
. Selain itu, Kotlin juga memungkinkan untuk melempar exception baru menggunakan throw
.
Blok try-catch
#
Blok try-catch
digunakan untuk menangani exception yang mungkin terjadi di dalam blok try
. Jika ada exception yang dilempar di dalam blok try
, eksekusi akan segera berpindah ke blok catch
yang sesuai.
Sintaks:
try {
// Kode yang mungkin menyebabkan exception
} catch (e: ExceptionType) {
// Penanganan exception
}
Contoh:
fun divide(a: Int, b: Int): Int {
return try {
a / b
} catch (e: ArithmeticException) {
println("Tidak dapat membagi dengan nol.")
0
}
}
fun main() {
val result = divide(10, 0)
println("Hasil: $result")
}
Dalam contoh di atas, jika nilai b
adalah 0, maka ArithmeticException
akan dilempar. Blok catch
menangkap exception ini dan memberikan penanganan yang sesuai.
Blok finally
#
Blok finally
adalah bagian opsional dari struktur try-catch
. Kode di dalam blok finally
akan selalu dijalankan terlepas dari apakah exception dilempar atau tidak. Blok ini biasanya digunakan untuk membersihkan sumber daya, seperti menutup file atau koneksi jaringan.
Sintaks:
try {
// Kode yang mungkin menyebabkan exception
} catch (e: ExceptionType) {
// Penanganan exception
} finally {
// Kode yang selalu dijalankan
}
Contoh:
fun readFile(fileName: String) {
val reader = FileReader(fileName)
try {
// Membaca file
} catch (e: FileNotFoundException) {
println("File tidak ditemukan: $fileName")
} finally {
reader.close()
}
}
Pada contoh di atas, reader.close()
di dalam blok finally
akan selalu dijalankan, memastikan bahwa file selalu ditutup setelah digunakan.
Melempar Exception dengan throw
#
Kotlin memungkinkan Anda untuk melempar exception secara manual menggunakan kata kunci throw
. Ini berguna ketika Anda ingin memvalidasi kondisi tertentu dan melempar exception jika kondisi tersebut tidak terpenuhi.
Contoh:
fun validateAge(age: Int) {
if (age < 18) {
throw IllegalArgumentException("Usia harus 18 tahun atau lebih.")
}
}
fun main() {
try {
validateAge(15)
} catch (e: IllegalArgumentException) {
println("Terjadi kesalahan: ${e.message}")
}
}
Dalam contoh ini, jika age
kurang dari 18, exception IllegalArgumentException
akan dilempar dengan pesan kesalahan yang relevan.
Custom Exception #
Anda juga dapat membuat exception kustom dengan mewarisi kelas Exception
atau kelas turunannya.
Contoh:
class InvalidUserException(message: String) : Exception(message)
fun login(username: String, password: String) {
if (username != "admin" || password != "admin123") {
throw InvalidUserException("Username atau password salah.")
}
println("Login berhasil")
}
fun main() {
try {
login("user", "password")
} catch (e: InvalidUserException) {
println("Terjadi kesalahan: ${e.message}")
}
}
Pada contoh di atas, InvalidUserException
adalah exception kustom yang didefinisikan oleh pengguna. Jika login gagal, exception ini akan dilempar dan ditangani.
Checked dan Unchecked Exceptions #
Kotlin tidak membedakan antara checked dan unchecked exceptions seperti Java. Semua exception di Kotlin diperlakukan sebagai unchecked, artinya Anda tidak diharuskan untuk menangkap atau mendeklarasikan exception yang mungkin dilemparkan oleh suatu fungsi. Ini membuat kode Kotlin lebih bersih dan tidak terikat pada penanganan exception eksplisit.
Kesimpulan #
Exception handling dalam Kotlin memungkinkan Anda menangani kesalahan dan kondisi tidak terduga dengan cara yang terstruktur dan aman. Dengan menggunakan blok try-catch
, finally
, serta kemampuan untuk melempar dan membuat exception kustom, Anda dapat menulis kode yang lebih tahan terhadap kesalahan dan lebih mudah untuk di-debug. Kotlin juga menyederhanakan penanganan exception dengan menghapus perbedaan antara checked dan unchecked exceptions, sehingga membuat proses penulisan kode lebih efisien.