Swift-এ স্ট্রাক্ট (Struct) হলো একটি ডেটা স্ট্রাকচার, যা ক্লাসের মতোই বিভিন্ন প্রোপার্টি এবং মেথড ধারণ করতে পারে। তবে, স্ট্রাক্ট হলো ভ্যালু টাইপ, যেখানে ক্লাস হলো রেফারেন্স টাইপ। স্ট্রাক্ট ব্যবহার করে আপনি সহজে ডেটার একটি কাস্টম টাইপ তৈরি করতে পারেন, যা Swift-এর বিল্ট-ইন ডেটা টাইপের মতোই কাজ করে। স্ট্রাক্ট সাধারণত ছোট এবং সাধারণ ডেটা মডেল তৈরির জন্য ব্যবহার করা হয়।
স্ট্রাক্ট কী?
স্ট্রাক্ট হলো এক ধরনের ডেটা স্ট্রাকচার, যা ভেরিয়েবল এবং ফাংশনকে একত্রিত করে। স্ট্রাক্ট তৈরি করতে struct কীওয়ার্ড ব্যবহার করা হয়। স্ট্রাক্ট ভ্যালু টাইপ হওয়ায়, এটি একটি ভেরিয়েবল বা কনস্ট্যান্টে অ্যাসাইন বা পাস করার সময় কপি তৈরি করে, যেখানে ক্লাস রেফারেন্স হিসেবে কাজ করে।
স্ট্রাক্টের গঠন
struct StructName {
// প্রোপার্টি
var property1: Type
var property2: Type
// মেথড
func methodName() {
// কার্যক্রম
}
}
struct: স্ট্রাক্ট ডিফাইন করার জন্য কীওয়ার্ড।- প্রোপার্টি: স্ট্রাক্টের বৈশিষ্ট্য বা ডেটা, যা সাধারণত ভেরিয়েবল বা কনস্ট্যান্ট হিসেবে থাকে।
- মেথড: স্ট্রাক্টের কার্যক্রম বা ফাংশন, যা ফাংশন আকারে ডিফাইন করা হয়।
একটি স্ট্রাক্ট উদাহরণ
struct Person {
var name: String
var age: Int
func greet() {
print("Hello, my name is \(name) and I am \(age) years old.")
}
}
// স্ট্রাক্ট থেকে অবজেক্ট তৈরি
let person1 = Person(name: "Alice", age: 25)
person1.greet() // Output: "Hello, my name is Alice and I am 25 years old."
- এখানে,
Personনামের একটি স্ট্রাক্ট ডিফাইন করা হয়েছে, যাnameএবংageনামে দুটি প্রোপার্টি ধারণ করে এবং একটি মেথডgreet()রয়েছে। person1হলোPersonস্ট্রাক্ট থেকে তৈরি করা একটি অবজেক্ট।
ভ্যালু টাইপের বৈশিষ্ট্য
স্ট্রাক্ট Swift-এ ভ্যালু টাইপ হিসেবে কাজ করে, অর্থাৎ এটি কপি করে কাজ করে। যদি একটি স্ট্রাক্ট অবজেক্টকে অন্য একটি ভেরিয়েবল বা কনস্ট্যান্টে অ্যাসাইন করা হয়, তবে তার একটি কপি তৈরি হয়, এবং কোনো পরিবর্তন সেই কপিতে প্রভাব ফেলে না।
var person1 = Person(name: "Alice", age: 25)
var person2 = person1
person2.name = "Bob"
print(person1.name) // Output: "Alice"
print(person2.name) // Output: "Bob"
- এখানে,
person1এবংperson2একে অপরের কপি হিসেবে তৈরি হয়েছে।person2তে পরিবর্তন করলেperson1তে কোনো প্রভাব পড়ে না, কারণ তারা দুটি আলাদা কপি।
মিউটেবল এবং ইমিউটেবল স্ট্রাক্ট
স্ট্রাক্টের প্রোপার্টি মিউটেবল (পরিবর্তনযোগ্য) হতে হলে স্ট্রাক্টটি একটি var ভেরিয়েবল হতে হবে এবং মেথডকে mutating হিসেবে চিহ্নিত করতে হবে।
struct Car {
var brand: String
var model: String
mutating func updateModel(newModel: String) {
model = newModel
}
}
var myCar = Car(brand: "Tesla", model: "Model S")
myCar.updateModel(newModel: "Model 3")
print(myCar.model) // Output: "Model 3"
- এখানে,
updateModelমেথডটিmutatingহিসেবে চিহ্নিত করা হয়েছে, কারণ এটি স্ট্রাক্টের প্রোপার্টি পরিবর্তন করছে।
স্ট্রাক্টের সাথে ইনিশিয়ালাইজার
Swift-এ স্ট্রাক্ট অটোমেটিকালি একটি মেম্বারওয়াইজ ইনিশিয়ালাইজার তৈরি করে, যা প্রতিটি প্রোপার্টির জন্য মান ইনিশিয়ালাইজ করতে পারে।
struct Rectangle {
var width: Double
var height: Double
}
// স্ট্রাক্ট থেকে অবজেক্ট তৈরি
let rect = Rectangle(width: 10.0, height: 5.0)
print("Width: \(rect.width), Height: \(rect.height)")
- এখানে,
Rectangleস্ট্রাক্টের জন্য কোনো কাস্টম ইনিশিয়ালাইজার তৈরি করা হয়নি, কিন্তু Swift অটোমেটিকালি একটি মেম্বারওয়াইজ ইনিশিয়ালাইজার তৈরি করেছে।
কাস্টম ইনিশিয়ালাইজার
স্ট্রাক্টে প্রোপার্টি ইনিশিয়ালাইজ করতে আমরা চাইলে কাস্টম ইনিশিয়ালাইজারও তৈরি করতে পারি।
struct Circle {
var radius: Double
var area: Double
init(radius: Double) {
self.radius = radius
self.area = 3.1416 * radius * radius
}
}
let myCircle = Circle(radius: 5.0)
print("Radius: \(myCircle.radius), Area: \(myCircle.area)")
- এখানে,
Circleস্ট্রাক্টে একটি কাস্টম ইনিশিয়ালাইজার ব্যবহার করা হয়েছে, যাradiusএবংareaপ্রোপার্টি ইনিশিয়ালাইজ করে।
স্ট্রাক্ট বনাম ক্লাস
| বৈশিষ্ট্য | স্ট্রাক্ট (Struct) | ক্লাস (Class) |
|---|---|---|
| টাইপ | ভ্যালু টাইপ | রেফারেন্স টাইপ |
| ইনহেরিটেন্স | ইনহেরিট করা যায় না | ইনহেরিট করা যায় |
| মেম্বারওয়াইজ ইনিশিয়ালাইজার | Swift অটোমেটিকালি তৈরি করে | তৈরি করতে হয় |
| ডি-ইনিশিয়ালাইজার | নেই | আছে (deinit) |
কখন স্ট্রাক্ট ব্যবহার করবেন?
- যখন আপনার ডেটা টাইপ ছোট এবং সহজ।
- যখন আপনি ভ্যালু টাইপ (কপি-বাই-ভ্যালু) আচরণ চান।
- যখন ইনহেরিটেন্স প্রয়োজন নেই।
- যখন আপনার টাইপের ইনক্যাপসুলেশন (data encapsulation) দরকার, কিন্তু অত্যন্ত জটিল নয়।
উপসংহার
Swift-এ স্ট্রাক্ট হলো একটি শক্তিশালী ডেটা স্ট্রাকচার, যা ক্লাসের মতো কাজ করতে পারে, তবে এটি ভ্যালু টাইপ হিসেবে কাজ করে এবং সাধারণত ছোট ও সাধারণ ডেটা মডেলের জন্য উপযুক্ত। স্ট্রাক্ট ব্যবহার করে প্রোগ্রামকে আরও সুসংগঠিত, পুনঃব্যবহারযোগ্য এবং কার্যকরী করা যায়।
Read more