Objective-C তে, @try, @catch, এবং @finally ব্লকগুলো exception handling বা ব্যতিক্রম হ্যান্ডলিং এর জন্য ব্যবহৃত হয়। যখন কোনো কোড ব্লকে কোনো ত্রুটি বা ব্যতিক্রম ঘটতে পারে, তখন আমরা এই ব্লকগুলির মাধ্যমে সেই ব্যতিক্রমগুলো ধরতে এবং সেগুলোর জন্য উপযুক্ত ব্যবস্থা নিতে পারি। এর মাধ্যমে কোডের নিরাপত্তা এবং স্থিরতা নিশ্চিত করা যায়।
১. @try ব্লক
@try ব্লকটি সেই কোড ব্লককে চিহ্নিত করে যেখানে ব্যতিক্রম ঘটতে পারে। এখানে, আপনি সাধারণত সেই কোড লিখেন যা কোনো সমস্যা তৈরি করতে পারে বা যেখানে কোনো ব্যতিক্রম ঘটতে পারে।
উদাহরণ:
@try {
// এখানে ব্যতিক্রম ঘটতে পারে এমন কোড থাকবে
NSArray *arr = @[@1, @2, @3];
NSLog(@"%@", arr[5]); // এখানে আউট অফ বাউন্ড এক্সেস হবে
}এখানে arr[5] তে একটি আউট অফ বাউন্ড এক্সেস ঘটবে, কারণ অ্যারেটির মাত্র তিনটি উপাদান রয়েছে। এই অবস্থায়, @try ব্লকের মধ্যে ব্যতিক্রম ঘটবে।
২. @catch ব্লক
@catch ব্লকটি @try ব্লকের মধ্যে ঘটানো ব্যতিক্রমগুলো ধরতে ব্যবহৃত হয়। আপনি এখানে ব্যতিক্রম ধরার জন্য নির্দিষ্ট ধরণের exception ক্লাস উল্লেখ করতে পারেন, যেমন **NSException**। ব্যতিক্রম ঘটলে, @catch ব্লকটি কার্যকর হবে এবং ত্রুটি মোকাবেলার কোড এখানে থাকবে।
উদাহরণ:
@try {
NSArray *arr = @[@1, @2, @3];
NSLog(@"%@", arr[5]); // আউট অফ বাউন্ড এক্সেস
}
@catch (NSException *exception) {
NSLog(@"Error: %@", exception); // ব্যতিক্রমের তথ্য লগ করা
}এখানে, @catch ব্লকটি NSException ধরবে এবং ত্রুটির বার্তা কনসোলে প্রিন্ট করবে।
৩. @finally ব্লক
@finally ব্লকটি ব্যবহার করা হয় যে কোনো অবস্থায় কোডের শেষাংশে কার্যকরী হতে, না importa ব্যতিক্রম ঘটেছে কি না। এটি সাধারণত সেক্ষেত্রে ব্যবহার হয় যেখানে আপনি কিছু পরিষ্কার বা ফাইনাল কাজ সম্পাদন করতে চান, যেমন মেমরি রিলিজ বা রিসোর্স বন্ধ করা।
উদাহরণ:
@try {
NSArray *arr = @[@1, @2, @3];
NSLog(@"%@", arr[5]); // আউট অফ বাউন্ড এক্সেস
}
@catch (NSException *exception) {
NSLog(@"Error: %@", exception);
}
@finally {
NSLog(@"This will always run, whether an exception was thrown or not");
}এখানে, @finally ব্লকটি ব্যতিক্রম ঘটেছে কি না তার পরোয়া না করে এক্সিকিউট হবে। এটি সাধারণত resources বা অবজেক্ট পরিষ্কার করার জন্য ব্যবহৃত হয়, যাতে কোডের পরবর্তী অংশ সঠিকভাবে চালানো যায়।
ব্যতিক্রম হ্যান্ডলিং: পূর্ণ উদাহরণ
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
@try {
NSArray *arr = @[@1, @2, @3];
NSLog(@"%@", arr[5]); // আউট অফ বাউন্ড এক্সেস
}
@catch (NSException *exception) {
NSLog(@"Caught exception: %@", exception);
}
@finally {
NSLog(@"The @finally block always runs.");
}
}
return 0;
}আউটপুট:
Caught exception: Index 5 beyond bounds for empty array
The @finally block always runs.@tryব্লকের মধ্যে আউট অফ বাউন্ড এক্সেস ঘটছে।@catchব্লকে ব্যতিক্রমটি ধরা হচ্ছে এবং এটি কনসোলে প্রিন্ট হচ্ছে।@finallyব্লকটি অবশ্যই এক্সিকিউট হবে, ঠিক ত্রুটি ঘটুক বা না ঘটুক।
ব্যতিক্রম হ্যান্ডলিং এর সুবিধা
- ত্রুটির সঠিক পরিচালনা: আপনি যখন জানেন যে কিছু কোড ব্যতিক্রম তৈরি করতে পারে, তখন সেই ব্যতিক্রমকে সঠিকভাবে ধরতে এবং মোকাবেলা করতে পারবেন।
- কোডের স্থিরতা: ব্যতিক্রম হ্যান্ডলিংয়ের মাধ্যমে প্রোগ্রাম ক্র্যাশ হওয়া আটকানো যায় এবং আপনার অ্যাপ্লিকেশন চালু থাকাকালীন সঠিকভাবে কাজ করতে পারে।
- পুনরুদ্ধার: ব্যতিক্রম হ্যান্ডলিং আপনাকে সেই কোড পুনরুদ্ধারের সুযোগ দেয় যেখানে ত্রুটি ঘটেছে।
সারাংশ
@try: ব্যতিক্রম ঘটতে পারে এমন কোড ব্লক।@catch: ব্যতিক্রম ধরার জন্য ব্লক।@finally: ব্যতিক্রম ঘটুক বা না ঘটুক, এই ব্লকটি সর্বদা কার্যকর হয়। সাধারণত ক্লিনআপ বা শেষ কাজ করার জন্য ব্যবহৃত হয়।
Objective-C তে exception handling খুবই শক্তিশালী একটি কনসেপ্ট, যা আপনার কোডকে আরও স্থিতিশীল এবং নিরাপদ করে তোলে।
Read more