Objective-C তে, SEL এবং @selector কিওয়ার্ড দুটি বিশেষভাবে মেথডের রেফারেন্স তৈরি এবং ব্যবহারের জন্য ব্যবহৃত হয়। এই দুটি কিওয়ার্ডের মাধ্যমে আমরা একটি মেথডকে রেফারেন্স হিসেবে ব্যবহার করতে পারি এবং তা অন্য জায়গায় কল (invoke) করতে পারি। এটি সাধারণত dynamic method dispatching, target-action patterns (যেমন UIButton ক্লিকের জন্য), এবং message passing ব্যবহৃত হয়।
1. SEL (Selector)
SEL একটি ডেটা টাইপ যা একটি মেথড সিগনেচার বা মেথড নাম কে রেফারেন্স করে। এটি প্রোগ্রামে মেথড নাম সংরক্ষণ এবং মেথড কলের জন্য ব্যবহৃত হয়। মূলত, এটি একটি মেথডের নামের পয়েন্টার হিসেবে কাজ করে, যা পরে অন্য যেকোনো জায়গায় মেসেজ পাসিং এর মাধ্যমে কল করা যেতে পারে।
SEL এর কাজ:
SELকেবল মেথড নাম সংরক্ষণ করে, কিন্তু এর সাথে কোন মেথডের বাস্তবায়ন যুক্ত থাকে না।- এটি method references এর মাধ্যমে এক্সিকিউট করা যায়।
SEL ডিক্লেয়ারেশন উদাহরণ:
SEL mySelector = @selector(displayCarDetails);এখানে, mySelector একটি SEL টাইপ ভেরিয়েবল যা displayCarDetails মেথডের সিলেক্টর বা রেফারেন্স সংরক্ষণ করছে।
2. @selector কিওয়ার্ড
@selector কিওয়ার্ডটি SEL টাইপের একটি মান তৈরি করতে ব্যবহৃত হয়, যা একটি মেথডের নাম রেফারেন্স করে। এটি একটি selector (মেথডের নাম) তৈরি করে, যেটি পরে performSelector: বা respondsToSelector: এর মতো মেথডে পাস করা যেতে পারে।
@selector এর সিনট্যাক্স:
@selector(methodName)এটি methodName নামে একটি মেথডের সিলেক্টর (রেফারেন্স) তৈরি করবে।
@selector উদাহরণ:
SEL selector = @selector(displayCarDetails);এখানে, @selector(displayCarDetails) একটি SEL তৈরি করছে যা displayCarDetails মেথডের রেফারেন্স।
3. SEL এবং @selector এর ব্যবহার
SEL এবং @selector এর মাধ্যমে মেথড রেফারেন্স তৈরি এবং ব্যবহার করা হয় যেখানে মেথডের নাম ডাইনামিকভাবে নির্ধারণ করা হয় এবং সেই মেথড কল করা হয়। এটি সাধারণত target-action pattern বা message passing সিস্টেমে ব্যবহৃত হয়।
performSelector: এর মাধ্যমে মেথড কল:
একবার SEL তৈরি হয়ে গেলে, performSelector: মেথড ব্যবহার করে সেই মেথড কল করা যায়।
@interface Car : NSObject
- (void) displayCarDetails;
@end
@implementation Car
- (void) displayCarDetails {
NSLog(@"Displaying car details...");
}
@end
int main() {
@autoreleasepool {
Car *myCar = [[Car alloc] init];
// @selector দিয়ে সিলেক্টর তৈরি
SEL selector = @selector(displayCarDetails);
// performSelector দিয়ে সিলেক্টর কল করা
if ([myCar respondsToSelector:selector]) {
[myCar performSelector:selector];
}
}
return 0;
}@selector(displayCarDetails): এটিdisplayCarDetailsমেথডের সিলেক্টর তৈরি করে।[myCar performSelector:selector]: এটি সিলেক্টরের মাধ্যমেdisplayCarDetailsমেথড কল করে।
এখানে performSelector: মেথডটি SEL টাইপের একটি আর্গুমেন্ট নেয় এবং ঐ মেথডটি ডাইনামিকভাবে কল করে।
4. respondsToSelector: এর মাধ্যমে মেথড চেক করা
respondsToSelector: মেথড ব্যবহার করে আপনি চেক করতে পারেন যে, একটি অবজেক্ট নির্দিষ্ট SEL (মেথড) সিলেক্টরটি প্রাপ্ত এবং কার্যকরভাবে বাস্তবায়িত করতে পারে কিনা।
respondsToSelector: উদাহরণ:
if ([myCar respondsToSelector:selector]) {
[myCar performSelector:selector];
} else {
NSLog(@"Method not found");
}এখানে, প্রথমে respondsToSelector: চেক করবে যে myCar অবজেক্টের মধ্যে displayCarDetails মেথডটি বিদ্যমান কিনা। যদি মেথডটি বিদ্যমান থাকে, তবে তা কল করা হবে, অন্যথায় একটি বার্তা প্রদর্শিত হবে।
5. SEL এবং @selector এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | SEL | @selector |
|---|---|---|
| মূল্য | এটি একটি টাইপ যা একটি মেথডের নাম ধারণ করে | এটি একটি কিওয়ার্ড যা SEL টাইপ তৈরি করে |
| ব্যবহার | মেথডের নামকে রেফারেন্স করার জন্য ব্যবহৃত | মেথডের নাম selector হিসেবে রেফারেন্স করার জন্য ব্যবহৃত |
| কোডে ব্যবহারের প্রকার | SEL mySelector = @selector(mymethod) | SEL selector = @selector(mymethod) |
| ধরন | SEL একটি টাইপ যা মেথডের নাম ধারণ করে | @selector একটি কিওয়ার্ড যা মেথডের নামকে SEL টাইপে রূপান্তরিত করে |
6. সারাংশ
SELএকটি ডেটা টাইপ যা মেথডের নামের রেফারেন্স বা পয়েন্টার ধারণ করে এবং এটি মেসেজ পাসিং ও ডাইনামিক মেথড কলের জন্য ব্যবহৃত হয়।@selectorকিওয়ার্ডটি ব্যবহার করে আপনি মেথডের নাম থেকে একটি SEL তৈরি করেন যা মেথড রেফারেন্স হিসেবে কাজ করে।performSelector:এবংrespondsToSelector:এর মতো মেথড ব্যবহার করে ডাইনামিকভাবে মেথড কল করা যায় এবং মেথডের উপস্থিতি পরীক্ষা করা যায়।
এটি Objective-C তে messae passing এবং dynamic method invocation এর মাধ্যমে ডাইনামিক প্রোগ্রামিংয়ের অংশ হিসেবে ব্যবহৃত হয়।
Read more