আপনি ঠিক বলেছেন।
সিস্টেমে দ্রুত ব্যর্থ হতে দেওয়া যাচাই করা ব্যতিক্রমগুলি ব্যবহৃত হয় যা একটি ভাল জিনিস। সঠিকভাবে কাজ করার জন্য আপনার পদ্ধতিটি কী প্রত্যাশা করছে তা আপনার স্পষ্টভাবে বলা উচিত। এইভাবে আপনি ইনপুটটি একবারে যাচাই করতে পারবেন।
এই ক্ষেত্রে:
/**
* @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"
.....
}
শুধু উদাহরণ দিতে। মুল বক্তব্যটি হ'ল, যদি সিস্টেমটি দ্রুত ব্যর্থ হয় তবে আপনি কোথায় এবং কেন এটি ব্যর্থ হয়েছিল তা জানবেন। আপনি একটি স্ট্যাকট্রেস পাবেন:
IllegalArgumentException: I told you not to use "exit"
at some.package.AClass.execute(Aclass.java:5)
at otherPackage.Otherlass.delegateTheWork(OtherClass.java:4569)
ar ......
এবং আপনি কি জানেন যে কি ঘটেছে। "ডেলিগ্রেট দ্য ওয়ার্ক" পদ্ধতিতে (অন্য 4545 লাইন) অনারক্লাস আপনার ক্লাসটিকে "প্রস্থান" মান সহ ডেকেছিল, এমনকি যখন এটি না করা উচিত তখনও etc.
অন্যথায় আপনাকে সমস্ত কোডে বৈধতা ছিটিয়ে দিতে হবে এবং এটি ত্রুটিযুক্ত। এছাড়াও, কখনও কখনও কী ভুল হয়েছে তা ট্র্যাক করা শক্ত এবং আপনি হতাশাবোধক ডিবাগিংয়ের কয়েক ঘন্টা আশা করতে পারেন
নলপয়েন্টারএক্সেপশনগুলির সাথে একই জিনিস ঘটে। আপনার যদি প্রায় 15 টি পদ্ধতি সহ 700 লাইনের বর্গ থাকে তবে 30 টি বৈশিষ্ট্য ব্যবহার করা হয় এবং এগুলির কোনওটিই শূন্য হতে পারে না, পরিবর্তনের জন্য সেই সমস্ত পদ্ধতির প্রতিটিটিতে বৈধতা দেওয়ার পরিবর্তে আপনি এই সমস্ত বৈশিষ্ট্যগুলি কেবল পঠনযোগ্য করতে পারেন এবং সেগুলি কনস্ট্রাক্টরে বৈধ করতে পারেন বা কারখানা পদ্ধতি।
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
....
}
চেক করা ব্যতিক্রমগুলি কার্যকর হয় যখন প্রোগ্রামার (আপনি বা আপনার সহকর্মীরা) সবকিছু ঠিকঠাক করেছিলেন, ইনপুটটি বৈধ করেছেন, পরীক্ষা চালিয়েছেন এবং সমস্ত কোড নিখুঁত হয় তবে কোডটি তৃতীয় পক্ষের ওয়েব সার্ভিসের সাথে সংযোগ স্থাপন করে যা ডাউন হতে পারে (বা একটি ফাইল) আপনি ব্যবহার করছেন অন্য একটি বাহ্যিক প্রক্রিয়া ইত্যাদি দ্বারা মুছে ফেলা হয়েছিল)। সংযোগ দেওয়ার চেষ্টা করার আগে ওয়েবসওয়ারিসটি বৈধ হতে পারে তবে ডেটা স্থানান্তর করার সময় কিছু ভুল হয়েছে।
সেই পরিস্থিতিতে আপনি বা আপনার সহকর্মীরা এটিকে সহায়তা করার জন্য কিছুই করতে পারেন না। কিন্তু তবুও আপনাকে কিছু করতে হবে এবং ব্যবহারকারীর চোখে অ্যাপ্লিকেশনটি কেবল মরে না যেতে এবং অদৃশ্য হয়ে যেতে দেয় না। আপনি এটির জন্য একটি পরীক্ষিত ব্যতিক্রম ব্যবহার করেন এবং ব্যতিক্রমটি পরিচালনা করেন, এমনটি ঘটলে আপনি কী করতে পারবেন? বেশিরভাগ সময়, ত্রুটিটি লগ করার চেষ্টা করার জন্য, সম্ভবত আপনার কাজ (অ্যাপ্লিকেশনটি) সংরক্ষণ করুন এবং ব্যবহারকারীর কাছে একটি বার্তা উপস্থাপন করুন । (সাইটের ব্ল্যাবলা নিচে রয়েছে, দয়া করে পরে আবার চেষ্টা করুন ইত্যাদি)
যদি পরীক্ষিত ব্যতিক্রমটিকে অতিরিক্ত ব্যবহার করা হয় (সমস্ত পদ্ধতিতে স্বাক্ষর করে "ফেলে দেওয়া এক্সপ্রেশন" যোগ করে), তবে আপনার কোডটি খুব ভঙ্গুর হয়ে উঠবে, কারণ প্রত্যেকে সেই ব্যতিক্রমটিকে উপেক্ষা করবে (কারণ খুব সাধারণ) এবং কোডের গুণমান গুরুতর হবে আপোস।
আপনি যদি চেক না করা ব্যতিক্রমকে অতিরিক্ত ব্যবহার করেন তবে অনুরূপ কিছু ঘটবে। এই কোডটির ব্যবহারকারীরা জানেন না যে কিছু ভুল হয়ে যেতে পারে যদি প্রচুর চেষ্টা করে {...} ধরা (থ্রোয়েবল টি) হাজির হয়।