Pengecualian harus hanya itu .. pengecualian. Praktik terbaik ketika menggunakan pengecualian adalah menggunakannya untuk mencakup situasi di mana sesuatu yang bertentangan dengan apa yang Anda harapkan terjadi terjadi. Contoh klasik adalah FileNotFoundException yang dilemparkan ketika file tidak ada di sana. Jika Anda menguji keberadaan file, maka Anda menggunakan File.exists () karena Anda hanya mendorong dengan tongkat 10 kaki untuk melihat apakah Anda menabrak sesuatu.
Anda dapat secara teknis mencapai hasil yang sama dengan mengelilinginya dalam mencoba menangkap dan menggunakan file seolah-olah ada, tetapi A) pengecualian umumnya mahal sumber daya dan B) programmer akan menganggap Anda berarti file itu ada jika itu ada dalam try catch, yang menambah kebingungan keseluruhan suatu program.
Ada banyak situasi di mana saya akan menulis metode yang mengambil beberapa nilai dari database. Seribu hal bisa salah, dan melihat betapa saya hanya membutuhkan satu informasi kecil, tidak nyaman untuk mengelilingi panggilan dengan daftar coba coba yang berisi 5 pengecualian berbeda. Jadi, saya akan menangkap pengecualian dalam metode pengambilan. Jika terjadi kesalahan, saya mengambil tindakan apa pun yang sesuai untuk menutup koneksi database atau yang lainnya di klausa akhirnya dan mengembalikan nol. Ini adalah praktik yang baik tidak hanya karena menyederhanakan kode Anda tetapi juga karena "null" mengirim pesan yang sama dengan yang Anda dapatkan dari pengecualian .. bahwa ada sesuatu yang tidak berjalan sesuai rencana. Kelola spesifik pengecualian dalam metode pengambilan, tetapi kelola apa yang harus dilakukan ketika hal-hal tidak terjadi
Sebagai contoh:
Integer getUserCount() {
Integer result = null;
try {
// Attempt to open database and retrieve data
} catch (TimeoutException e) {
logger.error("Got a watch?");
} catch (MissingDatabaseException e) {
logger.error("What are you smoking?");
} catch (PermissionsToReadException e) {
logger.error("Did you *really* think you were getting away with that?");
} catch (PressedSendButtonToHardException e) {
logger.error("Seriously.. just back away from the computer... slowly..");
} catch (WTFException e) {
logger.error("You're on your own with this one.. I don't even know what happened..");
} finally {
// Close connections and whatnot
}
return result;
}
void doStuff() {
Integer result = getUserCount();
if(result != null) {
// Went as planned..
}
}