সুইফট প্রোগ্রামিং শেখার সময় এর আগে আমরা অ্যারে, সেট, ডিকশনারি ব্যবহার করেছি। এগুলো হচ্ছে সুইফটের বিল্টইন ডেটা টাইপ। এগুলোর বাহিরেও আমরা নিজেদের প্রয়োজন মত ডেটা টাইপ তৈরি করে নিতে পারি। আর তা করতে পারি স্ট্যাকচারের মাধ্যমে। নির্দিষ্ট প্রয়োজনের সংশ্লিষ্ট ভ্যারিয়েবল বা কন্সটেন্ট (প্রোপার্টিস) এবং বিভিন্ন ফাংশনালিটি একত্রিত করার জন্য স্ট্র্যাকচার ব্যবহার করা হয়।
স্ট্রাকচারের সিনট্যাক্সঃ
সুইফটে স্ট্র্যাকচার তৈরির জন্য struck কিওয়ার্ড ব্যবহার করতে হয়। এরপর স্ট্র্যাকচারের নাম লিখে {} ব্র্যাকেটের ভেতর স্ট্র্যাকচারের প্রোপার্টিস এবং ফাংশনালিটি লিখতে হয়।
struct StructureName {
// structure definition
}
স্ট্রাকচার প্রোপার্টিসঃ
স্ট্রাকচারের ভেতর কি ধরণের ডেটা স্টোর করব, তা বলে দিতে পারি প্রোপার্টিস এর মাধ্যমে। দুই ধরণের প্রোপার্টিস হতে পারে, একটা হচ্ছে ভেরিয়েবল, আরেকটা হচ্ছে কন্সটেন্ট। এই দুইটা প্রপার্টিস ব্যবহার করে একটা স্ট্রাকচারের উদাহরণঃ
struct Person {
let name: String
var age: Int
}
স্ট্রাকচার ইনিস্টেন্সঃ
স্ট্রাকচার তৈরি করা মানে একটা ব্লুপ্রিন্ট তৈরি করার মত। এই ব্লু প্রিন্ট ব্যবহার করে আমরা ঐ স্ট্র্যাকচারের একের অধিক ইনিস্টেন্স (Instances) তৈরি করে ব্যবহার করতে পারি। যেমনঃ
// structure definition
struct Person {
var name: String
var age: Int
}
// structure instance
var person1 = Person(name: "Jack", age: 30)
ইনিশিয়ালাইজেশনঃ
স্ট্র্যাকচারের ইনিস্টেন্স তৈরি করার সময় এর প্রোপার্টি গুলোর ভ্যালু পাস করতে হয়, যাকে বলে ইনিশিয়ালাইজেশন। যেমন উপরের কোডে Parson স্ট্র্যাকচারের ইনিস্টেন্স তৈরির সময় আমরা এর ভ্যালু গুলো ইনিশিয়ালাইজ করেছি: Person(name: "Jack", age: 30)
।
স্ট্র্যাকচারের প্রোপার্টি গুলো এক্সেস করা
স্ট্র্যাকচারের কোন প্রপার্টি এক্সেস করার জন্য ডট নোটেশন ব্যবহার করা হয়। যেমনঃ
// structure definition
struct Person {
var name: String
var age: Int
}
// structure instance
var person1 = Person(name: "Jack", age: 30)
print(person1.age)
এখানে Person
স্ট্র্যাকচার থেকে person1
নামে একটা ইনিটেন্স তৈরি করেছি আমরা। আর এর প্রোপার্টি যেমন age
পেতে পারি person1.age
ব্যবহার করে।
স্ট্রাকচারের মেথড
একটা নির্দিষ্ট স্ট্রাকচারের ফাংশন গুলোকে সাধারণত মেথড বলে। মেথড ব্যবহার করে স্ট্রাকচারের প্রোপার্টি গুলো মডিফাই করতে পারি। প্রোপার্টির মত মেথডও এক্সেস করতে ডট নোটেশন ব্যবহার করা হয়। যেমনঃ
// structure definition
struct Person {
var name: String
var age: Int
// Method to print person's information
func printInfo() {
print("Name: \(name), Age: \(age)")
}
}
// structure instance
var person1 = Person(name: "Jack", age: 30)
person1.printInfo()
ভ্যালু টাইপ
স্ট্র্যাকচার এবং ক্লাস অনেকটাই সিমিলার। অল্প কিছু পার্থক্য ছাড়া। তেমনি একটা পার্থক্য হচ্ছে স্ট্র্যাকচার হচ্ছে ভ্যালু টাইপ যেখানে ক্লাস হচ্ছে রেফারেন্স টাইপ। ভ্যালু টাইপ মানে হচ্ছে একটা ইনিস্ট্যান্স যখন আমরা কপি করব, তখন পুরা ভ্যালু গুলোরই নতুন কপি তৈরি হবে। নিচের উদাহরণটা দেখিঃ
// structure definition
struct Person {
var name: String
var age: Int
// Method to print person's information
func printInfo() {
print("Name: \(name), Age: \(age)")
}
}
// structure instance
var person1 = Person(name: "Jack", age: 30)
var copyOfPerson1 = person1
copyOfPerson1.age = 32
person1.printInfo()
copyOfPerson1.printInfo()
আউটপুট পাবোঃ
Name: Jack, Age: 30
Name: Jack, Age: 32
রেফারেন্স টাইপের ক্ষেত্রে দুইটা কপি একই ভ্যালুতে পয়েন্ট করত। যেখানে একটা পরিবর্তন করলে দুইটাই পরিবর্তন হয়ে যেতো। স্ট্র্যাকচার যেহেতু ভ্যালু টাইপ, তাই একটা ইনিস্ট্যান্সের ভ্যালু পরিবর্তন করলে কপি করা ইনিস্ট্যান্সের ভ্যালু পরিবর্তন হবে না।