এখনও নিচে স্ক্রোল করছি? এই যে!
এই প্রশ্নটি আমাকে কিছুক্ষণ পিছনে ফেলেছে।
try
{
int a=1;
int b=0;
int c=a/b;
}
catch(Exception ex)
{
console.writeline(ex.Message);
}
finally
{
console.writeline("Finally block");
}
console.writeline("After finally");
উপরের দৃশ্যে কী ছাপা হবে? হ্যাঁ ঠিকই অনুমান করেছেন:
প্রাক্তন ম্যাসেজ - এটি যাই হোক না কেন (সম্ভবত শূন্য দ্বারা বিভাগের চেষ্টা করা হয়েছে)
অবশেষে অবরুদ্ধ
শেষ পর্যন্ত
try
{
int a=1;
int b=0;
int c=a/b;
}
catch(Exception ex)
{
throw(ex);
}
finally
{
console.writeline("Finally block");
}
console.writeline("After finally");
কি এই মুদ্রণ হবে? কিছুই না! ক্যাচ ব্লকটি ত্রুটি উত্থাপন করার পরে এটি একটি ত্রুটি ছুঁড়ে দেয়।
একটি ভাল প্রোগ্রামিং স্ট্রাকচারে, আপনার ব্যতিক্রমগুলি ফানেলড করা হবে, এই অর্থে যে এই কোডটি অন্য স্তর থেকে পরিচালিত হবে। এ জাতীয় কেস উদ্দীপনা জাগাতে আমি এই কোডটি ব্যবহার করে নেস্ট করব।
try
{
try
{
int a=1;
int b=0;
int c=a/b;
}
catch(Exception ex)
{
throw(ex);
}
finally
{
console.writeline("Finally block")
}
console.writeline("After finally");
}
catch(Exception ex)
{
console.writeline(ex.Message);
}
এই ক্ষেত্রে আউটপুট হবে:
- অবশেষে অবরুদ্ধ
- ex.Message - যাই হোক না কেন।
এটা স্পষ্ট যে আপনি যখন একটি ব্যতিক্রম ধরা পড়েন এবং আবার এটি অন্যান্য স্তরগুলিতে ফেলে দেন (ফানেলিং), নিক্ষেপের পরে কোড কার্যকর হয় না। এটি ঠিক কীভাবে কোনও ফাংশনের অভ্যন্তরে কোনও রিটার্ন কাজ করে তার অনুরূপ কাজ করে।
ক্যাচ ব্লকের পরে কোডগুলিতে কেন আপনার সংস্থানগুলি বন্ধ করবেন না তা আপনি এখনই জানেন finally এগুলি অবশেষে ব্লকে রাখুন।