অবজেক্টিভ-সি (Objective-C) একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষা, যার ভিত্তি সি ভাষার ওপর। তবে এতে কিছু অতিরিক্ত বৈশিষ্ট্য রয়েছে, যেমন মেসেজ পাসিং সিস্টেম এবং অবজেক্ট-ওরিয়েন্টেড ধারণা। অবজেক্টিভ-সি এর সিনট্যাক্স সাধারণত সি ভাষার মতোই, তবে এতে কিছু আলাদা কনসেপ্ট এবং সিনট্যাক্সের বৈশিষ্ট্য রয়েছে।
নিচে অবজেক্টিভ-সি এর কিছু বেসিক ধারণা এবং সিনট্যাক্সের উদাহরণ দেয়া হলো।
১. হেডার ফাইল এবং ইমপ্লিমেন্টেশন ফাইল
অবজেক্টিভ-সি তে কোড দুটি প্রধান অংশে বিভক্ত হয়:
- হেডার ফাইল (.h): ক্লাস, মেথড এবং প্রপার্টি ডিফাইন করা হয়।
- ইমপ্লিমেন্টেশন ফাইল (.m): ক্লাসের মেথড এবং কার্যকারিতা ইমপ্লিমেন্ট করা হয়।
উদাহরণ (হেডার ফাইল):
// Car.h
#import <Foundation/Foundation.h>
@interface Car : NSObject
@property NSString *model;
@property int year;
- (void) displayCarDetails;
@endউদাহরণ (ইমপ্লিমেন্টেশন ফাইল):
// Car.m
#import "Car.h"
@implementation Car
- (void) displayCarDetails {
NSLog(@"Car Model: %@, Year: %d", self.model, self.year);
}
@end২. ক্লাস এবং অবজেক্ট
অবজেক্টিভ-সি তে ক্লাস হলো অবজেক্টের নীলনকশা এবং অবজেক্ট হলো সেই ক্লাসের একটি ইন্সট্যান্স।
ক্লাস ডিফিনেশন:
@interface Car : NSObject
@property NSString *model;
@property int year;
- (void) displayCarDetails;
@endঅবজেক্ট তৈরি:
Car *myCar = [[Car alloc] init];
myCar.model = @"Tesla Model S";
myCar.year = 2020;
[myCar displayCarDetails];৩. মেসেজ পাসিং সিস্টেম
অবজেক্টিভ-সি তে মেসেজ পাসিং সিস্টেম ব্যবহৃত হয়। অর্থাৎ, একটি অবজেক্ট অন্য অবজেক্টে মেসেজ পাঠিয়ে ফাংশন বা মেথড কল করে।
উদাহরণ:
[myCar displayCarDetails]; // মেসেজ পাসিংএখানে displayCarDetails একটি মেথড যেটি myCar অবজেক্টের মাধ্যমে কল করা হচ্ছে।
৪. প্রপার্টি ডেক্লেয়ারেশন এবং গেটার/সিটার
অবজেক্টিভ-সি তে প্রপার্টি ডেক্লেয়ার করার জন্য @property ব্যবহার করা হয়, এবং অটোমেটিক্যালি গেটার এবং সিটার মেথড তৈরি হয়।
উদাহরণ:
@interface Car : NSObject
@property NSString *model; // প্রপার্টি ডেক্লেয়ারেশন
@property int year;
@endএটি গেটার এবং সিটার মেথডের মতো কাজ করবে:
modelপ্রপার্টির জন্য গেটার:- (NSString *)model;modelপ্রপার্টির জন্য সিটার:- (void)setModel:(NSString *)model;
৫. অ্যারে এবং ডিকশনারি
অবজেক্টিভ-সি তে অ্যারে এবং ডিকশনারি ব্যবহারের জন্য NSArray এবং NSDictionary ব্যবহৃত হয়।
উদাহরণ:
// NSArray
NSArray *fruits = @[@"Apple", @"Banana", @"Orange"];
NSLog(@"First fruit: %@", fruits[0]);
// NSDictionary
NSDictionary *person = @{@"name": @"John", @"age": @30};
NSLog(@"Person's name: %@", person[@"name"]);৬. কন্ট্রোল স্ট্রাকচার
অবজেক্টিভ-সি তে সাধারণ সি ভাষার মতোই কন্ট্রোল স্ট্রাকচার ব্যবহৃত হয়, যেমন if, else, for, while, ইত্যাদি।
উদাহরণ:
int a = 10;
int b = 20;
if (a < b) {
NSLog(@"a is less than b");
} else {
NSLog(@"a is greater than or equal to b");
}৭. মেমরি ম্যানেজমেন্ট
অবজেক্টিভ-সি তে ম্যানুয়াল মেমরি ম্যানেজমেন্টের জন্য retain, release, এবং autorelease ব্যবহৃত হয়, তবে বর্তমানে ARC (Automatic Reference Counting) ব্যবহৃত হয়, যা মেমরি ম্যানেজমেন্টকে সহজ করে।
উদাহরণ (ARC):
Car *myCar = [[Car alloc] init];
myCar.model = @"Tesla Model S"; // ARC মেমরি ম্যানেজমেন্টের মাধ্যমে অবজেক্ট রিলিজ হবে।৮. ডায়নামিক টাইপিং
অবজেক্টিভ-সি তে ডায়নামিক টাইপিং সমর্থিত। এর মানে হলো, একটি অবজেক্টের টাইপ রানটাইমে পরিবর্তন করা যেতে পারে।
উদাহরণ:
id myObject = [[Car alloc] init]; // 'id' হলো ডায়নামিক টাইপ
myObject = [[Person alloc] init]; // রানটাইমে টাইপ পরিবর্তন৯. প্রটোকল (Protocol)
প্রটোকল হল একটি চুক্তি যা ক্লাসকে নির্দিষ্ট কিছু মেথড ইমপ্লিমেন্ট করতে বাধ্য করে।
উদাহরণ:
@protocol CarDelegate <NSObject>
- (void) carDidStart;
- (void) carDidStop;
@endএখানে CarDelegate একটি প্রটোকল যা দুটি মেথড ডিফাইন করেছে। একটি ক্লাস যদি এই প্রটোকল গ্রহণ করে, তবে তাকে এই মেথডগুলো ইমপ্লিমেন্ট করতে হবে।
সারাংশ
অবজেক্টিভ-সি একটি শক্তিশালী এবং প্রাচীন ভাষা, যা অ্যাপল প্ল্যাটফর্মের জন্য ব্যবহৃত হয়ে আসছে। এর সিনট্যাক্স সি ভাষার সঙ্গে সামঞ্জস্যপূর্ণ হলেও এতে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ধারণা এবং মেসেজ পাসিং সিস্টেমের মতো উন্নত বৈশিষ্ট্য রয়েছে। এতে প্রপার্টি, মেথড, কন্ট্রোল স্ট্রাকচার, মেমরি ম্যানেজমেন্ট এবং ডায়নামিক টাইপিং ব্যবহৃত হয়, যা কোডের কার্যকারিতা ও নমনীয়তা বৃদ্ধি করে।
অবজেক্টিভ-সি (Objective-C) একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষা, এবং এটি সি ভাষার উপর ভিত্তি করে তৈরি। এর কোড স্ট্রাকচার সি ভাষার সাদৃশ্য হলেও কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে, বিশেষ করে অবজেক্ট এবং মেসেজ পাসিং সিস্টেমের ব্যবহার। অবজেক্টিভ-সি কোডের মূল স্ট্রাকচার অনেকটা সি ভাষার মতো, তবে কিছু অতিরিক্ত ফিচার থাকে যা অবজেক্ট-ওরিয়েন্টেড ধারণাগুলোর বাস্তবায়ন ঘটায়।
নিচে Objective-C এর কোড স্ট্রাকচারের মূল উপাদানগুলি আলোচনা করা হয়েছে:
১. প্রধান অংশ: #import বা #include নির্দেশনা
অবজেক্টিভ-সি কোডে বিভিন্ন ফ্রেমওয়ার্ক বা লাইব্রেরি ব্যবহারের জন্য #import বা #include ডিরেকটিভ ব্যবহার করা হয়। এতে আপনি অন্যান্য ফাইলগুলোকে কোডে অন্তর্ভুক্ত করতে পারেন। সাধারণত, #import ব্যবহৃত হয় কারণ এটি একাধিক ফাইল ইনক্লুড করার ক্ষেত্রে সমস্যার সৃষ্টি হতে দেয় না (যেমন সি তে #include).
#import <Foundation/Foundation.h> // ফাউন্ডেশন ফ্রেমওয়ার্ক২. ইন্টারফেস (@interface)
অবজেক্টিভ-সি তে একটি ক্লাসের ইন্টারফেস @interface কিওয়ার্ড দিয়ে ডিফাইন করা হয়। এখানে আপনি ক্লাসের প্রপার্টি এবং মেথড ডিক্লেয়ার করেন। একটি ক্লাসের ইন্টারফেস সাধারণত .h ফাইল (হেডার ফাইল) এ থাকে।
উদাহরণ:
@interface Car : NSObject // Car ক্লাস NSObject থেকে উত্তরাধিকারী
@property NSString *model;
@property int year;
- (void) displayCarDetails; // মেথড ঘোষণা
@end@interface: ক্লাসের ইন্টারফেসের শুরু।@property: ক্লাসের প্রপার্টি ঘোষণা (যেমন: model, year)।- (void): মেথড ডিক্লেয়ারেশন, যেটি ক্লাসের কাজের অংশ।
৩. ইমপ্লিমেন্টেশন (@implementation)
ক্লাসের কার্যকরী অংশ (মেথড ইমপ্লিমেন্টেশন) @implementation কিওয়ার্ড দিয়ে ডিফাইন করা হয়। এটি সাধারণত .m ফাইল (এমপ্লিমেন্টেশন ফাইল) এ থাকে। এখানে আপনি ক্লাসের মেথডগুলোর বাস্তবায়ন করেন।
উদাহরণ:
@implementation Car
- (void) displayCarDetails { // মেথড বাস্তবায়ন
NSLog(@"Car Model: %@, Year: %d", self.model, self.year);
}
@end@implementation: ক্লাসের বাস্তবায়ন শুরু।- (void): মেথড বাস্তবায়ন, যা ক্লাসের কার্যক্রম চালায়।
৪. মেইন ফাংশন (main)
অবজেক্টিভ-সি প্রোগ্রামের এন্ট্রি পয়েন্ট হল main ফাংশন, যেখানে প্রোগ্রামটি চালু হয়। সাধারণত এটি একটি @autoreleasepool ব্লক ব্যবহার করে, যা মেমরি ম্যানেজমেন্টে সাহায্য করে।
উদাহরণ:
int main(int argc, const char * argv[]) {
@autoreleasepool {
Car *myCar = [[Car alloc] init]; // নতুন Car অবজেক্ট তৈরি
myCar.model = @"Tesla Model S"; // প্রপার্টি সেট করা
myCar.year = 2022;
[myCar displayCarDetails]; // মেথড কল করা
}
return 0;
}@autoreleasepool: এটি একটি মেমরি ম্যানেজমেন্ট ব্লক, যা অবজেক্টগুলোকে অটোমেটিকালি রিলিজ করতে সাহায্য করে।allocএবংinit: অবজেক্ট তৈরি করার জন্য ব্যবহার করা হয়।[myCar displayCarDetails]: মেসেজ পাসিং সিস্টেমের মাধ্যমে মেথড কল।
৫. মেসেজ পাসিং সিস্টেম
অবজেক্টিভ-সি তে মেসেজ পাসিং সিস্টেম ব্যবহৃত হয়, যেখানে ক্লাসের অবজেক্ট অন্য অবজেক্টে মেসেজ পাঠিয়ে ফাংশন বা মেথড কল করে।
[object method]; // মেসেজ পাঠানোএটি সি তে ব্যবহৃত সাধারণ ফাংশন কলের তুলনায় আলাদা। এখানে মেসেজ পাঠানো হচ্ছে এবং ক্লাস নিজে এই মেসেজের জন্য একটি মেথড এক্সিকিউট করবে।
৬. প্রটোকল ও ডেলিগেট
অবজেক্টিভ-সি তে প্রটোকল এবং ডেলিগেট ব্যবহার করা হয় ক্লাসের মধ্যে ইন্টারঅ্যাকশন এবং চুক্তি স্থাপনের জন্য। প্রটোকল একটি ইন্টারফেস যা ক্লাসকে কিছু মেথড ইমপ্লিমেন্ট করতে বলে।
উদাহরণ:
@protocol CarDelegate <NSObject>
- (void) carDidStart;
- (void) carDidStop;
@endএখানে CarDelegate একটি প্রটোকল যা দুটি মেথড carDidStart এবং carDidStop ডিক্লেয়ার করেছে।
৭. এক্সটেনশন
একটি ক্লাসের বাইরে অতিরিক্ত মেথড বা প্রপার্টি যোগ করতে এক্সটেনশন ব্যবহার করা হয়।
@interface Car (AdditionalMethods)
- (void) startEngine;
@endএখানে Car ক্লাসের জন্য startEngine মেথডটি এক্সটেনশনের মাধ্যমে যোগ করা হয়েছে।
সারাংশ
অবজেক্টিভ-সি কোডের স্ট্রাকচার মূলত সি ভাষার মতোই, তবে এতে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং এর কনসেপ্ট এবং মেসেজ পাসিং সিস্টেম যুক্ত করা হয়েছে। এর কোড স্ট্রাকচারে @interface, @implementation, @autoreleasepool, এবং মেসেজ পাসিং সিস্টেম ইত্যাদি গুরুত্বপূর্ণ উপাদান থাকে। ক্লাস, অবজেক্ট, মেথড, প্রপার্টি, এবং প্রটোকল ব্যবহার করে কোড সংগঠিত করা হয়, যা অ্যাপ্লিকেশন ডেভেলপমেন্টে শক্তিশালী এবং মডুলার কাঠামো তৈরি করতে সহায়ক।
স্টেটমেন্ট (Statement), এক্সপ্রেশন (Expression) এবং কমেন্টিং (Commenting) প্রোগ্রামিং ভাষার মৌলিক ধারণা। এগুলি সঠিকভাবে বুঝলে কোড লেখা সহজ এবং পরিষ্কার হয়। এখানে এই তিনটি কনসেপ্টের সংজ্ঞা এবং ব্যবহারের বিস্তারিত আলোচনা করা হল।
১. স্টেটমেন্ট (Statement)
স্টেটমেন্ট হলো একটি প্রোগ্রাম কোডের মৌলিক একক যা একটি নির্দিষ্ট কাজ সম্পাদন করে। সাধারণভাবে, একটি স্টেটমেন্ট হলো কোনও কার্যকলাপ, যেমন পরিবর্তন বা যাচাই, যা প্রোগ্রাম চলাকালীন সময়ে সম্পন্ন হয়।
উদাহরণ:
int a = 10; // এটি একটি স্টেটমেন্টএই স্টেটমেন্টে int a = 10; হলো একটি স্টেটমেন্ট যেখানে একটি ভেরিয়েবল a-কে ১০ দিয়ে ইনিশিয়ালাইজ করা হচ্ছে। এখানে স্টেটমেন্টটি একটি নির্দিষ্ট কাজ করছে — একটি ভেরিয়েবলকে একটি মান প্রদান করা।
স্টেটমেন্টের ধরন:
- অ্যাসাইনমেন্ট স্টেটমেন্ট: একটি ভেরিয়েবলে মান অ্যাসাইন করা হয়।
- উদাহরণ:
x = 5;
- উদাহরণ:
- কন্ডিশনাল স্টেটমেন্ট: শর্ত ভিত্তিক কোড এক্সিকিউট করা হয় (যেমন
ifস্টেটমেন্ট)।- উদাহরণ:
if (x > 10) { ... }
- উদাহরণ:
- লুপ স্টেটমেন্ট: কোডের একটি অংশ বারবার এক্সিকিউট করা হয় (যেমন
forবাwhileলুপ)।- উদাহরণ:
for (int i = 0; i < 10; i++) { ... }
- উদাহরণ:
২. এক্সপ্রেশন (Expression)
এক্সপ্রেশন হলো এক বা একাধিক অপারেটর ও অপারেন্ডের সমন্বয়ে গঠিত একটি অংশ যা একটি মান রিটার্ন করে। এক্সপ্রেশনগুলো প্রোগ্রামে গণনা বা হিসাব করতে ব্যবহৃত হয় এবং একটি মান প্রদান করে, যা অন্য কোনও কাজের জন্য ব্যবহৃত হতে পারে।
উদাহরণ:
int a = 10;
int b = 5;
int result = a + b; // এখানে 'a + b' একটি এক্সপ্রেশনএই উদাহরণে, a + b হলো একটি এক্সপ্রেশন যা দুটি ভেরিয়েবলের যোগফল প্রদান করে। এক্সপ্রেশনগুলো এক বা একাধিক অপারেটরের সাহায্যে মান বের করার কাজ করে, যেমন গণনা, তুলনা ইত্যাদি।
এক্সপ্রেশনের ধরন:
- এরিথমেটিক এক্সপ্রেশন: যোগ, বিয়োগ, গুণ, ভাগ ইত্যাদি অপারেশন করা হয়।
- উদাহরণ:
x + y,a * b,x / y
- উদাহরণ:
- লজিক্যাল এক্সপ্রেশন: সত্য/মিথ্যা নির্ধারণে ব্যবহৃত হয়।
- উদাহরণ:
x > 10 && y < 20
- উদাহরণ:
- অ্যাসাইনমেন্ট এক্সপ্রেশন: ভেরিয়েবলকে মান অ্যাসাইন করা হয়।
- উদাহরণ:
x = 5
- উদাহরণ:
৩. কমেন্টিং (Commenting)
কমেন্টিং হলো প্রোগ্রামের এমন অংশ যা কোডের মধ্যে লেখা হয়, কিন্তু এটি কম্পাইলার দ্বারা এক্সিকিউট হয় না। কমেন্টিং কোডের উদ্দেশ্য, ফাংশন বা কার্যাবলী ব্যাখ্যা করতে ব্যবহৃত হয় এবং প্রোগ্রামটি বুঝতে সাহায্য করে। কমেন্ট কোডে আরও স্পষ্টতা এবং পঠনযোগ্যতা যোগ করতে সহায়তা করে, বিশেষত বড় কোডবেসে।
কমেন্টের ধরন:
সিঙ্গেল-লাইন কমেন্ট:
- সিঙ্গেল-লাইন কমেন্ট এক লাইনে থাকে এবং এটি
//দিয়ে শুরু হয়। যেকোনো কিছু লিখলেই এটি একটি কমেন্ট হিসেবে গণ্য হয় এবং কোডে কোনও প্রভাব ফেলে না।
উদাহরণ:
// এটি একটি সিঙ্গেল-লাইন কমেন্ট int a = 5; // এটি একটি কমেন্ট- সিঙ্গেল-লাইন কমেন্ট এক লাইনে থাকে এবং এটি
মাল্টি-লাইন কমেন্ট:
- মাল্টি-লাইন কমেন্টে একাধিক লাইন থাকে এবং এটি
/*দিয়ে শুরু হয় এবং*/দিয়ে শেষ হয়। মাল্টি-লাইন কমেন্ট অনেক লাইন একসাথে ব্যাখ্যা করতে ব্যবহৃত হয়।
উদাহরণ:
/* এটি একটি মাল্টি-লাইন কমেন্ট যেখানে বেশ কয়েকটি লাইন ব্যাখ্যা করা হয় */ int a = 5;- মাল্টি-লাইন কমেন্টে একাধিক লাইন থাকে এবং এটি
ডকুমেন্টেশন কমেন্ট:
- এটি একটি বিশেষ ধরনের কমেন্ট যা কোডের ডকুমেন্টেশন তৈরি করতে ব্যবহৃত হয়। সাধারণত ডকুমেন্টেশন কমেন্ট জাভা বা সুইফটের মতো ভাষায় ব্যবহৃত হয় এবং এটি কোডের ফাংশন বা মেথডের বর্ণনা দেয়।
উদাহরণ (Swift):
/// এই ফাংশনটি দুটি সংখ্যার যোগফল দেয় func add(x: Int, y: Int) -> Int { return x + y }
সারাংশ
- স্টেটমেন্ট (Statement): এটি একটি কার্যকর প্রোগ্রাম কোডের অংশ যা একটি নির্দিষ্ট কাজ করে, যেমন মান অ্যাসাইন করা বা একটি শর্ত যাচাই করা।
- এক্সপ্রেশন (Expression): এটি অপারেটর এবং অপারেন্ডের সমন্বয়ে গঠিত একটি অংশ যা একটি মান রিটার্ন করে।
- কমেন্টিং (Commenting): এটি কোডের ব্যাখ্যা বা ডকুমেন্টেশন হিসেবে ব্যবহৃত হয়, যাতে কোডটি আরও সহজে বোঝা যায়, তবে এটি এক্সিকিউট হয় না।
স্টেটমেন্ট, এক্সপ্রেশন এবং কমেন্টিং প্রোগ্রামিংয়ের মৌলিক ধারণা যা কোড লেখার ক্ষেত্রে স্পষ্টতা এবং কার্যকারিতা বৃদ্ধি করতে সাহায্য করে।
অবজেক্টিভ-সি (Objective-C) ভাষায় বিভিন্ন ডেটা টাইপ রয়েছে, যা বিভিন্ন ধরনের মান সংরক্ষণ এবং পরিচালনা করতে ব্যবহৃত হয়। এখানে আমরা কিছু সাধারণ ডেটা টাইপ সম্পর্কে বিস্তারিত আলোচনা করব, যেমন: int, float, char, BOOL, এবং NSString।
১. int (ইন্টিজার)
int ডেটা টাইপ একটি পূর্ণসংখ্যা (integer) সংরক্ষণ করার জন্য ব্যবহৃত হয়। এটি সাধারণত সারা বিশ্বের সিস্টেমে ব্যবহৃত একটি মৌলিক সংখ্যা টাইপ, যা কোনো দশমিক অংশ ছাড়াই পূর্ণ সংখ্যা সংরক্ষণ করতে পারে।
উদাহরণ:
int age = 25;এখানে, age একটি পূর্ণসংখ্যা (integer) যেটি 25 মান সংরক্ষণ করে।
বৈশিষ্ট্য:
- সাইজ: সাধারণত ৪ বাইট (32-বিট সিস্টেমে)।
- মানের পরিসীমা: -2,147,483,648 থেকে 2,147,483,647 (32-বিট সিস্টেমে)।
২. float (ফ্লোট)
float ডেটা টাইপ দশমিক সংখ্যা (floating-point number) সংরক্ষণ করতে ব্যবহৃত হয়। এটি সাধারণত ভগ্নাংশ বা দশমিক সংখ্যা সংরক্ষণ করতে ব্যবহৃত হয়। তবে float টাইপের সংখ্যা সীমিত সঠিকতা সহকারে সংরক্ষণ করা হয়।
উদাহরণ:
float temperature = 23.5;এখানে, temperature একটি ভগ্নাংশ সংখ্যা (floating-point number) 23.5 সংরক্ষণ করছে।
বৈশিষ্ট্য:
- সাইজ: ৪ বাইট।
- মানের পরিসীমা: প্রায় ±3.4 × 10^38 (দশমিক সঠিকতা ৭ ডিজিট)।
৩. char (ক্যারেক্টার)
char ডেটা টাইপ একটি একক অক্ষর (character) সংরক্ষণ করতে ব্যবহৃত হয়। এটি সাধারণত একটি ASCII অক্ষর বা অক্ষর সমন্বয় ধারণ করতে ব্যবহৃত হয়।
উদাহরণ:
char grade = 'A';এখানে, grade একটি চরিত্র (character) A সংরক্ষণ করছে।
বৈশিষ্ট্য:
- সাইজ: ১ বাইট।
- পরিসীমা: -128 থেকে 127 (signed) অথবা 0 থেকে 255 (unsigned)।
৪. BOOL (বুলিয়ান)
BOOL ডেটা টাইপ সত্য (true) বা মিথ্যা (false) এর মান ধারণ করতে ব্যবহৃত হয়। এটি লজিক্যাল ভেরিয়েবল হিসেবে কাজ করে, যা সাধারণত YES বা NO মান গ্রহণ করে। অবজেক্টিভ-সি তে, BOOL একটি int টাইপের মতো কাজ করে, তবে এটি একটি সুনির্দিষ্ট ধরনের মান (YES বা NO) প্রকাশ করে।
উদাহরণ:
BOOL isRaining = YES;এখানে, isRaining একটি বুলিয়ান (Boolean) ভেরিয়েবল যা YES মান ধারণ করছে।
বৈশিষ্ট্য:
- সাইজ: ৪ বাইট (প্ল্যাটফর্মের ওপর নির্ভর করে)।
- মানের পরিসীমা:
YESবাNO। YESআসলে1এবংNOআসলে0এর সমান।
৫. NSString (স্ট্রিং)
NSString একটি অবজেক্টিভ-সি ক্লাস যা স্ট্রিং (অক্ষরের সিকোয়েন্স) সংরক্ষণ করতে ব্যবহৃত হয়। এটি একটি ইমিউটেবল (immutable) ডেটা টাইপ, অর্থাৎ একবার তৈরি হলে এটি পরিবর্তন করা সম্ভব নয়। স্ট্রিং ব্যবহারের জন্য অবজেক্টিভ-সি তে বেশ কিছু বিশেষ মেথড থাকে যা স্ট্রিং ম্যানিপুলেশন, সেমেন্টিক এবং কম্পিউটেশনাল কাজগুলো সহজ করে।
উদাহরণ:
NSString *name = @"John Doe";এখানে, name একটি NSString অবজেক্ট যা "John Doe" স্ট্রিং সংরক্ষণ করছে।
বৈশিষ্ট্য:
- সাইজ: স্ট্রিংয়ের দৈর্ঘ্যের ওপর নির্ভর করে পরিবর্তিত হয়।
- ব্যবহারের সুবিধা: স্ট্রিংয়ের বিভিন্ন অপারেশন যেমন আন্ডারস্কোর, ক্যারেক্টার অনুসন্ধান, স্ট্রিং এর দৈর্ঘ্য মাপা ইত্যাদি।
প্রথম অ্যাক্সেস:
- NSString কোডে ব্যবহৃত হয় সাধারণত
@সিনট্যাক্সের মাধ্যমে।
সারাংশ
int: পূর্ণসংখ্যা সংরক্ষণ করে।float: দশমিক সংখ্যা বা ভগ্নাংশ সংখ্যা সংরক্ষণ করে।char: একক অক্ষর সংরক্ষণ করে।BOOL: সত্য (YES) বা মিথ্যা (NO) মান ধারণ করে।NSString: স্ট্রিং (অক্ষরের সিকোয়েন্স) সংরক্ষণ করে।
এই ডেটা টাইপগুলি অবজেক্টিভ-সি ভাষার প্রাথমিক ব্লক, যা বিভিন্ন ধরনের মান সংরক্ষণ করতে ব্যবহৃত হয়। এগুলোর ব্যবহারে কোড আরো কার্যকরী এবং নিখুঁত হয়।
অবজেক্টিভ-সি তে ভেরিয়েবল ডিক্লারেশন এবং ইনিশিয়ালাইজেশন হলো এক ধরনের প্রক্রিয়া যার মাধ্যমে আপনি একটি ভেরিয়েবল ঘোষণা করেন এবং তার মান সেট করেন। অবজেক্টিভ-সি তে ভেরিয়েবল ডিক্লারেশন এবং ইনিশিয়ালাইজেশন সি ভাষার মতোই সাধারণ, তবে এখানে কিছু অতিরিক্ত বিষয় রয়েছে যেগুলো আপনাকে অবশ্যই জানতে হবে, যেমন অ্যাবস্ট্রাকশন, ডেটা টাইপস এবং অবজেক্ট ব্যবস্থাপনা।
১. ভেরিয়েবল ডিক্লারেশন (Variable Declaration)
ভেরিয়েবল ডিক্লারেশন হলো এক ধরনের ঘোষণা, যেখানে আপনি একটি ভেরিয়েবল তৈরি করেন এবং তার ধরন নির্ধারণ করেন। Objective-C তে ভেরিয়েবল ডিক্লারেশন সাধারনত দুইটি অংশে বিভক্ত হয়:
- প্রাথমিক ডেটা টাইপ – যেমন
int,float,NSString, ইত্যাদি। - ভেরিয়েবলের নাম – এটি ভেরিয়েবলের পরিচিতি যা আপনি পরে কোডে ব্যবহার করবেন।
উদাহরণ:
// সাধারণ ডেটা টাইপের ভেরিয়েবল ডিক্লারেশন
int age; // Integer টাইপ ভেরিয়েবল
float height; // Float টাইপ ভেরিয়েবল
char gender; // Character টাইপ ভেরিয়েবল
NSString *name; // NSString টাইপ ভেরিয়েবলএখানে, age, height, gender, এবং name হলো ভেরিয়েবল নাম এবং তাদের ডেটা টাইপ নির্ধারণ করা হয়েছে।
২. ভেরিয়েবল ইনিশিয়ালাইজেশন (Variable Initialization)
ভেরিয়েবল ইনিশিয়ালাইজেশন হলো এমন একটি প্রক্রিয়া যার মাধ্যমে আপনি ভেরিয়েবলটির মান নির্ধারণ করেন। এটি ডিক্লারেশনের পরে করা হয়, অথবা আপনি একে একসাথে ডিক্লারেশন এবং ইনিশিয়ালাইজেশন করতে পারেন।
উদাহরণ:
// সাধারণ ডেটা টাইপের ভেরিয়েবল ইনিশিয়ালাইজেশন
int age = 25; // Integer টাইপ ভেরিয়েবলকে মান দেওয়া
float height = 5.9; // Float টাইপ ভেরিয়েবলকে মান দেওয়া
char gender = 'M'; // Character টাইপ ভেরিয়েবলকে মান দেওয়া
NSString *name = @"John"; // NSString টাইপ ভেরিয়েবলকে মান দেওয়াএখানে, ভেরিয়েবলগুলি নির্দিষ্ট মান দিয়ে ইনিশিয়ালাইজ করা হয়েছে।
৩. অবজেক্টের ভেরিয়েবল ডিক্লারেশন এবং ইনিশিয়ালাইজেশন
অবজেক্টিভ-সি তে, অনেক সময় আপনি অবজেক্ট তৈরি করেন যেগুলো একটি নির্দিষ্ট ক্লাসের ইন্সট্যান্স। আপনি এই ধরনের অবজেক্ট ভেরিয়েবল ডিক্লারেশন এবং ইনিশিয়ালাইজেশনও করতে পারেন।
উদাহরণ:
// NSString অবজেক্ট তৈরি এবং ইনিশিয়ালাইজেশন
NSString *greeting = [[NSString alloc] initWithString:@"Hello, World!"];
// NSArray অবজেক্ট তৈরি এবং ইনিশিয়ালাইজেশন
NSArray *fruits = [[NSArray alloc] initWithObjects:@"Apple", @"Banana", @"Cherry", nil];এখানে, greeting একটি NSString অবজেক্ট এবং fruits একটি NSArray অবজেক্ট।
৪. প্রপার্টি ভেরিয়েবল ডিক্লারেশন এবং ইনিশিয়ালাইজেশন
অবজেক্টিভ-সি তে ক্লাসের ভেরিয়েবল বা প্রপার্টি ডিক্লারেশন এবং ইনিশিয়ালাইজেশন এর জন্য @property এবং @synthesize ডিরেকটিভ ব্যবহার করা হয়। তবে, Xcode এখন @synthesize কে অটোমেটিক্যালি ম্যানেজ করে, তাই অনেক সময় আপনি শুধুমাত্র @property ব্যবহার করতে পারেন।
উদাহরণ:
@interface Person : NSObject
@property NSString *name; // প্রপার্টি ডিক্লারেশন
@property int age; // প্রপার্টি ডিক্লারেশন
@end
@implementation Person
// @synthesize is optional in modern Objective-C
@end
// অবজেক্ট তৈরি এবং প্রপার্টি ইনিশিয়ালাইজেশন
Person *person = [[Person alloc] init];
person.name = @"John"; // প্রপার্টি ইনিশিয়ালাইজেশন
person.age = 30; // প্রপার্টি ইনিশিয়ালাইজেশনএখানে, name এবং age প্রপার্টি ডিক্লারেশন এবং ইনিশিয়ালাইজেশন করা হয়েছে।
৫. ডিফল্ট ভেরিয়েবল মান
অবজেক্টিভ-সি তে, যদি আপনি কোন ভেরিয়েবল ইনিশিয়ালাইজ না করেন, তবে তা একটি ডিফল্ট মান গ্রহণ করে, যেমন:
- প্রাইমিটিভ টাইপ (int, float, char, etc.) ডিফল্ট মান হবে ০।
- অবজেক্ট টাইপ (NSString, NSArray, NSDictionary, etc.) ডিফল্ট মান হবে
nil।
উদাহরণ:
int a; // ডিফল্ট মান 0
NSString *str; // ডিফল্ট মান nilসারাংশ
অবজেক্টিভ-সি তে ভেরিয়েবল ডিক্লারেশন এবং ইনিশিয়ালাইজেশন সি ভাষার মতোই, তবে এখানে ক্লাস এবং অবজেক্ট টাইপের জন্য কিছু বিশেষ নিয়ম রয়েছে। আপনি ভেরিয়েবল ডিক্লারেশন এবং ইনিশিয়ালাইজেশন একসাথে করতে পারেন এবং এটি খুবই গুরুত্বপূর্ণ যখন আপনি অবজেক্ট তৈরি করতে চান। আপনার কোডের কার্যকারিতা এবং পরিস্কারতা নিশ্চিত করতে এগুলো সঠিকভাবে ব্যবহার করা প্রয়োজন।
Read more