Kamu benar.
Pengecualian yang tidak dicentang digunakan untuk membiarkan sistem gagal dengan cepat yang merupakan hal yang baik. Anda harus dengan jelas menyatakan apa yang diharapkan metode Anda agar dapat berfungsi dengan baik. Dengan cara ini Anda dapat memvalidasi input hanya sekali.
Misalnya:
/**
* @params operation - The operation to execute.
* @throws IllegalArgumentException if the operation is "exit"
*/
public final void execute( String operation ) {
if( "exit".equals(operation)){
throw new IllegalArgumentException("I told you not to...");
}
this.operation = operation;
.....
}
private void secretCode(){
// we perform the operation.
// at this point the opreation was validated already.
// so we don't worry that operation is "exit"
.....
}
Sekadar memberi contoh. Intinya adalah, jika sistem gagal dengan cepat, maka Anda akan tahu di mana dan mengapa itu gagal. Anda akan mendapatkan stacktrace seperti:
IllegalArgumentException: I told you not to use "exit"
at some.package.AClass.execute(Aclass.java:5)
at otherPackage.Otherlass.delegateTheWork(OtherClass.java:4569)
ar ......
Dan Anda akan tahu apa yang terjadi. OtherClass dalam metode "delegateTheWork" (pada baris 4569) memanggil kelas Anda dengan nilai "exit", bahkan ketika seharusnya tidak dilakukan dll.
Kalau tidak, Anda harus memercikkan validasi ke seluruh kode Anda dan itu rawan kesalahan. Plus, kadang-kadang sulit untuk melacak apa yang salah dan Anda mungkin mengharapkan berjam-jam frustasi debugging
Hal yang sama terjadi dengan NullPointerExceptions. Jika Anda memiliki kelas 700 baris dengan sekitar 15 metode, yang menggunakan 30 atribut dan tidak ada yang bisa nol, alih-alih memvalidasi di masing-masing metode untuk nullability, Anda bisa membuat semua atribut itu hanya-baca dan memvalidasi mereka di konstruktor atau metode pabrik.
public static MyClass createInstane( Object data1, Object data2 /* etc */ ){
if( data1 == null ){ throw NullPointerException( "data1 cannot be null"); }
}
// the rest of the methods don't validate data1 anymore.
public void method1(){ // don't worry, nothing is null
....
}
public void method2(){ // don't worry, nothing is null
....
}
public void method3(){ // don't worry, nothing is null
....
}
Pengecualian yang diperiksa Berguna ketika programmer (Anda atau rekan kerja Anda) melakukan segalanya dengan benar, memvalidasi input, menjalankan tes, dan semua kode sempurna, tetapi kode terhubung ke layanan web pihak ketiga yang mungkin turun (atau file) Anda menggunakan telah dihapus oleh proses eksternal lain, dll). Layanan web bahkan dapat divalidasi sebelum koneksi dicoba, tetapi selama transfer data terjadi kesalahan.
Dalam skenario itu tidak ada yang dapat Anda atau rekan kerja Anda lakukan untuk membantunya. Namun tetap saja Anda harus melakukan sesuatu dan tidak membiarkan aplikasi mati dan menghilang begitu saja di mata pengguna. Anda menggunakan pengecualian yang dicentang untuk itu dan menangani pengecualian, apa yang dapat Anda lakukan ketika itu terjadi?, Sebagian besar waktu, hanya untuk mencoba mencatat kesalahan, mungkin menyimpan pekerjaan Anda (aplikasi bekerja) dan menyajikan pesan kepada pengguna . (Situs blabla sedang down, coba lagi nanti dll.)
Jika pengecualian yang dicentang digunakan secara berlebihan (dengan menambahkan "throw Exception" di semua metode tanda tangan), maka kode Anda akan menjadi sangat rapuh, karena semua orang akan mengabaikan pengecualian itu (karena terlalu umum) dan kualitas kode akan menjadi serius dikompromikan.
Jika Anda terlalu sering menggunakan pengecualian yang tidak dicentang, hal serupa akan terjadi. Para pengguna kode itu tidak tahu apakah ada yang salah, banyak yang mencoba {...} catch (Throwable t) akan muncul.