@property এবং @synthesize হল Objective-C তে প্রপার্টি (Properties) সংজ্ঞায়িত এবং ব্যবহার করার জন্য গুরুত্বপূর্ণ কিওয়ার্ড। এটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর একটি গুরুত্বপূর্ণ অংশ, যেখানে অ্যাপ্লিকেশন ডেভেলপমেন্টে ক্লাসের মধ্যে ডেটা সংরক্ষণের জন্য প্রপার্টি ব্যবহৃত হয়।
1. @property কিওয়ার্ড
@property কিওয়ার্ডটি একটি ক্লাসে প্রপার্টি ঘোষণা করতে ব্যবহৃত হয়। এটি এক ধরনের গেটার (getter) এবং সেটার (setter) মেথড তৈরি করে দেয়। এটি একটি বৈশিষ্ট্যকে প্রকাশ করে এবং সেই বৈশিষ্ট্যটির জন্য কিছু মৌলিক কাজ সম্পাদন করতে পারে যেমন: ডেটা সংরক্ষণ এবং এক্সেস করা।
@property এর বৈশিষ্ট্য:
- এটি ক্লাসের মধ্যে একটি নতুন বৈশিষ্ট্য সংজ্ঞায়িত করে।
- Getter এবং Setter মেথডগুলোর জন্য ডিফল্ট আচরণ প্রদান করে।
- আপনি এটি ব্যবহার করে দ্রুত অ্যাক্সেসর এবং মিউটেটর মেথড তৈরি করতে পারেন।
@property এর সিনট্যাক্স:
@property dataType variableName; // সাধারণভাবে প্রপার্টি ডিফাইন করা হয়dataType: প্রপার্টির ডেটা টাইপ, যেমনNSString,int,float, ইত্যাদি।variableName: প্রপার্টির নাম।
উদাহরণ:
@interface Person : NSObject
@property NSString *name; // প্রপার্টি ডিক্লেয়ারেশন
@property int age; // প্রপার্টি ডিক্লেয়ারেশন
@endএখানে name এবং age হল Person ক্লাসের প্রপার্টি, যা অবজেক্টে ডেটা সংরক্ষণ করতে ব্যবহৃত হবে।
2. @synthesize কিওয়ার্ড
@synthesize কিওয়ার্ডটি getter এবং setter মেথডগুলোকে বাস্তবায়ন (synthesize) করতে ব্যবহৃত হয়। এর মাধ্যমে আপনি প্রপার্টির জন্য ডিফল্ট মেথড তৈরি করতে পারেন, তবে @synthesize আধুনিক Objective-C কোডে আর দরকার হয় না কারণ Xcode স্বয়ংক্রিয়ভাবে getter এবং setter মেথড তৈরি করে।
যদি আপনি @synthesize ব্যবহার না করেন, তবে @property ব্যবহৃত প্রপার্টির জন্য স্বয়ংক্রিয়ভাবে getter এবং setter মেথড তৈরি করা হবে।
@synthesize এর সিনট্যাক্স:
@synthesize variableName = _variableName;variableName: প্রপার্টির নাম যা আপনি@propertyএ ডিক্লেয়ার করেছেন।_variableName: প্রপার্টি মেম্বার ভেরিয়েবল। এটি একটি অভ্যন্তরীণ ভেরিয়েবল যা getter এবং setter মেথডে ব্যবহৃত হয়।
উদাহরণ:
@implementation Person
@synthesize name = _name; // প্রপার্টি নামের জন্য getter এবং setter তৈরি করা হচ্ছে
@synthesize age = _age; // প্রপার্টি বয়সের জন্য getter এবং setter তৈরি করা হচ্ছে
@endএখানে name এবং age এর জন্য স্বয়ংক্রিয়ভাবে getter এবং setter মেথড তৈরি করা হচ্ছে, এবং অভ্যন্তরীণ ভেরিয়েবল হিসেবে _name এবং _age ব্যবহার করা হচ্ছে।
3. @property এবং @synthesize এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | @property | @synthesize |
|---|---|---|
| কার্য | ক্লাসে প্রপার্টি ডিক্লেয়ার করার জন্য ব্যবহৃত | প্রপার্টি ডিফাইন করে এবং গেটার ও সেটার মেথড তৈরি করে |
| মেথড তৈরি | স্বয়ংক্রিয়ভাবে গেটার এবং সেটার তৈরি করে | কাস্টম মেম্বার ভেরিয়েবল তৈরি এবং কাস্টম গেটার/সেটার অ্যাসাইন করতে পারে |
| ডিফল্ট ব্যবহার | Xcode স্বয়ংক্রিয়ভাবে গেটার ও সেটার তৈরি করে | এখন আর সাধারণত ব্যবহৃত হয় না (আধুনিক Xcode এ) |
| ব্যবহার | শুধুমাত্র প্রপার্টি ডিক্লেয়ার করতে ব্যবহৃত | প্রপার্টি ডিক্লেয়ারেশনের পরে প্রপার্টি বাস্তবায়নে ব্যবহৃত |
4. প্রপার্টি অ্যাট্রিবিউট (Property Attributes)
@property কিওয়ার্ডে কিছু অ্যাট্রিবিউট (attributes) ব্যবহার করা হয়, যা প্রপার্টির আচরণ নির্ধারণ করে। এগুলোর মধ্যে কিছু গুরুত্বপূর্ণ অ্যাট্রিবিউট হলো:
nonatomic: এটি বলে দেয় যে, প্রপার্টি অ্যাট্রিবিউটটি থ্রেড-সেফ নয়। এটি ডিফল্টভাবে ব্যবহার হয়।atomic: এটি বলে দেয় যে, প্রপার্টি অ্যাট্রিবিউটটি থ্রেড-সেফ এবং ডেটা অ্যাক্সেস নিশ্চিত করে।strong: এটি প্রপার্টি ভ্যালু ধরা রাখে এবং রেফারেন্স কাউন্ট বাড়ায়।weak: এটি রেফারেন্স কাউন্ট বাড়ায় না এবং শুধুমাত্র অবজেক্টের রেফারেন্স রাখে, যেটিnilহতে পারে।copy: এটি অবজেক্টকে কপি করে এবং মূল অবজেক্টে পরিবর্তন হলে কপি অবজেক্ট অপরিবর্তিত থাকে।
উদাহরণ:
@property (nonatomic, strong) NSString *name;
@property (nonatomic, copy) NSArray *friends;
@property (nonatomic, weak) id delegate;strong:nameপ্রপার্টি একটি শক্তিশালী রেফারেন্স হিসাবে থাকবে।copy:friendsপ্রপার্টি একটি কপি করা অ্যারের রেফারেন্স থাকবে।weak:delegateপ্রপার্টি একটি দুর্বল রেফারেন্স থাকবে, যাতে রেফারেন্স কাউন্ট না বাড়ে।
5. সারাংশ
@propertyকিওয়ার্ডটি একটি প্রপার্টি ডিক্লেয়ার করতে ব্যবহৃত হয় এবং এটি getter এবং setter মেথড তৈরি করে দেয়।@synthesizeকিওয়ার্ডটি ব্যবহৃত হয় প্রপার্টি মেম্বার ভেরিয়েবল এবং getter/setter মেথড তৈরি করতে। আধুনিক Objective-C তে এটি স্বয়ংক্রিয়ভাবে ব্যবহৃত হয় এবং সাধারণত ব্যবহৃত হয় না।- প্রপার্টি অ্যাট্রিবিউটের মাধ্যমে আমরা nonatomic, strong, weak, copy ইত্যাদি ব্যবহার করে প্রপার্টির আচরণ নিয়ন্ত্রণ করতে পারি।
এটি ছিল Objective-C তে @property এবং @synthesize এর ব্যবহারের মৌলিক ধারণা।
Read more