ক্লাসকে বলা যেতে পারে অবজেক্ট তৈরির ব্লু প্রিন্ট। অবজেক্টের সংশ্লিষ্ট ভ্যারিয়েবল বা কন্সটেন্ট (প্রোপার্টিস) এবং বিভিন্ন ফাংশনালিটি একত্রিত করার জন্য ক্লাস ব্যবহার করা হয়। সুইফট অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজ। আর অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এর বিল্ডিং ব্লক হচ্ছে ক্লাস।
ক্লাসের সিনট্যাক্সঃ
সুইফট প্রোগ্রামিং এ ক্লাস তৈরি করার জন্য class কিওয়ার্ড ব্যবহার করা হয়। এরপর ক্লাসের নাম লিখে {} ব্র্যাকেটের ভেতর এর প্রোপার্টিস এবং ফাংশনালিটি লিখতে হয়। ক্লাসের ফাংশনালিটিকে বলা হয় মেথড।
class ClassName {
// class definition
}
ক্লাসের প্রোপার্টি
আমরা জেনেছি ক্লাস হচ্ছে অবজেক্টের ব্লু প্রিন্ট। আর একটা অবজেক্টের ভেতর কি ধরণের ডেটা থাকবে, তা বলে দিতে পারি প্রোপার্টিস এর মাধ্যমে। দুই ধরণের প্রোপার্টিস হতে পারে, একটা হচ্ছে ভেরিয়েবল (var), আরেকটা হচ্ছে কন্সটেন্ট (let)। এই দুইটা প্রপার্টিস ব্যবহার করে একটা ক্লাসের উদাহরণঃ
class Person {
let name: String
var age: Int
}
ইন্সট্যান্সঃ
ক্লাস থেকে অবজেক্ট তৈরি করাকে বলা হয় ঐ ক্লাসের ইন্সট্যান্স তৈরি। একটা ক্লাস ব্যবহার করে একের অধিক ইন্সট্যান্স তৈরি করা যায়। যেমন একটা ব্লু প্রিন্ট ব্যবহার করে আমরা যত ইচ্ছে তত কপি তৈরি করতে পারি, তেমন আরকি।
// class definition
class Person {
var name: String = "Jhon"
var age: Int = 24
}
// instance
var person1 = Person()
ইনিশিয়ালাইজেশনঃ
ক্লাস থেকে অবজেক্ট তৈরির সময় এর ইনিশিয়াল ভ্যালু গুলো দিতে হয়। পাশাপাশি অন্য কোন সেটআপের দরকার হলে তাও করা হয়। একে বলা হয় ইনিশিয়ালাইজেশন। আর এই ইনিশিয়ালাইজেশন করা হয় init() মেথডের মাধ্যমে। যেমনঃ
// class definition
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
// instance
var person1 = Person(name: "John", age: 24)
ক্লাসের প্রোপার্টি এক্সেস করা
ক্লাসের বিভিন্ন প্রোপার্টি এক্সেস ও পরিবর্তন করার জন্য ডট নোটেশন ব্যবহার করা হয়। যেমনঃ
// class definition
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
// instance
var person1 = Person(name: "John", age: 24)
print(person1.name)
person1.name = "John Doe"
print(person1.name)
মেথডঃ
ক্লাসের ফাংশনালিটিকে বলা হয় মেথড। এই মেথড গুলো ক্লাসের বিভিন্ন প্রোপার্টির উপর বিভিন্ন অপারেশন চালাতে পারে। প্রোপার্টির মত মেথড এক্সেস করার জন্য ডট নোটেশন ব্যবহার করতে হয়। যেমনঃ
// class definition
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
// class method
func printInfo() {
print("Name: \(name), Age: \(age)")
}
}
// instance
var person1 = Person(name: "John", age: 24)
person1.printInfo()
রেফারেন্স টাইপঃ
ক্লাস এবং স্ট্র্যাকচার অনেক ক্ষেত্রেই এক অল্প কিছু পার্থক্য ছাড়া। তেমনি একটা পার্থক্য হচ্ছে এর ভ্যালু টাইপ। স্ট্র্যাকচার হচ্ছে ভ্যালু টাইপ যেখানে ক্লাস হচ্ছে রেফারেন্স টাইপ। ভ্যালু টাইপ মানে হচ্ছে একটা ইনিস্ট্যান্স যখন আমরা কপি করব, তখন পুরা ভ্যালু গুলোরই নতুন কপি তৈরি হবে। যেখানে রেফারেন্স টাইপের ক্ষেত্রে দুইটা কপি একই ভ্যালুতে পয়েন্ট করে। নিচের উদাহরণটা দেখিঃ
// class definition
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
// instance
var person1 = Person(name: "John", age: 24)
var copyOfPerson1 = person1
copyOfPerson1.age = 25
print(person1.age)
print(copyOfPerson1.age)
আউটপুট পাবোঃ
25
25
দুইটাই একই অবেজক্ট থেকে কপি করেছে। তাই দুইটার যে কোন একটা পরিবর্তন করলে দুইটার ভ্যালুই পরিবর্তন হয়ে যাবে।