Constructors এবং Initializers
কটলিনে Constructors এবং Initializers ব্যবহার করে ক্লাসের অবজেক্ট তৈরি এবং প্রাথমিক মান সেট করা হয়। কটলিনে দুটি ধরনের কন্সট্রাক্টর রয়েছে: Primary Constructor এবং Secondary Constructor। এছাড়া, Initializer Blocks ব্যবহার করে অবজেক্টের ইনিশিয়াল স্টেট সেট করা যায়। নিচে এই কনসেপ্টগুলো নিয়ে বিস্তারিত আলোচনা করা হলো:
১. Primary Constructor
কটলিনে প্রাইমারি কন্সট্রাক্টর হলো ক্লাসের প্রধান কন্সট্রাক্টর, যা ক্লাস ডিক্লারেশনের সাথে সরাসরি যুক্ত থাকে। প্রাইমারি কন্সট্রাক্টর সাধারণত প্রোপার্টিগুলো ইনিশিয়ালাইজ করার জন্য ব্যবহৃত হয়।
উদাহরণ:
class Person(val name: String, var age: Int)
ব্যাখ্যা:
- এখানে
Personক্লাসের প্রাইমারি কন্সট্রাক্টরnameএবংageনামে দুটি প্রোপার্টি গ্রহণ করে। - প্রাইমারি কন্সট্রাক্টর সরাসরি ক্লাস ডিক্লারেশনের সাথে সংযুক্ত থাকে এবং এতে বডি থাকে না।
প্রাইমারি কন্সট্রাক্টরের সাথে ইনিশিয়ালাইজেশন:
class Person(val name: String, var age: Int) {
init {
println("Person created with name: $name and age: $age")
}
}
ব্যাখ্যা:
initব্লক প্রাইমারি কন্সট্রাক্টরের সাথে সম্পর্কিত। যখন ক্লাসের অবজেক্ট তৈরি হয়, তখনinitব্লকের কোড এক্সিকিউট হয়।- এখানে,
initব্লকে প্রাথমিক মেসেজ প্রিন্ট করা হচ্ছে।
২. Secondary Constructor
কটলিনে সেকেন্ডারি কন্সট্রাক্টর ব্যবহার করা হয় অতিরিক্ত ইনিশিয়ালাইজেশন লজিক প্রয়োগ করতে, যা প্রাইমারি কন্সট্রাক্টর দ্বারা সরাসরি সমাধান করা যায় না। একটি ক্লাসে একাধিক সেকেন্ডারি কন্সট্রাক্টর থাকতে পারে।
উদাহরণ:
class Person(val name: String) {
var age: Int = 0
constructor(name: String, age: Int) : this(name) {
this.age = age
}
}
ব্যাখ্যা:
- এখানে
Personক্লাসের প্রাইমারি কন্সট্রাক্টর একটি প্যারামিটার (name) নেয়। - সেকেন্ডারি কন্সট্রাক্টর
nameএবংageনামে দুটি প্যারামিটার নেয়, এবং প্রাইমারি কন্সট্রাক্টরকে কল করে (: this(name)), তারপরageপ্রোপার্টি সেট করে।
৩. Initializer Blocks
Initializer Block হলো একটি ব্লক যা প্রাইমারি কন্সট্রাক্টরের পরে এক্সিকিউট হয়। এটি ইনিশিয়ালাইজেশন লজিক প্রয়োগ করতে ব্যবহৃত হয়, যা প্রাইমারি কন্সট্রাক্টরের বাইরে রাখতে হয়।
উদাহরণ:
class Employee(val name: String, val salary: Double) {
init {
println("Employee name: $name, Salary: $salary")
}
}
ব্যাখ্যা:
Employeeক্লাসের প্রাইমারি কন্সট্রাক্টরে দুটি প্রোপার্টি আছে:nameএবংsalary।initব্লকটি অবজেক্ট তৈরি হলে ইনিশিয়ালাইজ হয় এবং প্রাথমিক মেসেজ প্রিন্ট করে।
বেশি ইনিশিয়ালাইজার ব্লক ব্যবহার:
class Product(val name: String, val price: Double) {
init {
println("Product created: $name")
}
init {
println("Price: $price")
}
}
ব্যাখ্যা:
- একটি ক্লাসে একাধিক
initব্লক থাকতে পারে, এবং এগুলো উপরের ক্রম অনুযায়ী এক্সিকিউট হয়।
৪. প্রাইমারি এবং সেকেন্ডারি কন্সট্রাক্টরের সমন্বয়
আপনি প্রাইমারি এবং সেকেন্ডারি কন্সট্রাক্টর একসাথে ব্যবহার করে ক্লাসে আরও ফ্লেক্সিবল ইনিশিয়ালাইজেশন করতে পারেন।
উদাহরণ:
class Vehicle(val model: String) {
var year: Int = 0
init {
println("Vehicle model: $model")
}
constructor(model: String, year: Int) : this(model) {
this.year = year
println("Vehicle year: $year")
}
}
fun main() {
val car1 = Vehicle("Toyota")
val car2 = Vehicle("Honda", 2020)
}
ব্যাখ্যা:
- এখানে
Vehicleক্লাসে একটি প্রাইমারি এবং একটি সেকেন্ডারি কন্সট্রাক্টর আছে। car1অবজেক্ট প্রাইমারি কন্সট্রাক্টর ব্যবহার করে তৈরি হয়েছে এবং শুধুমাত্র মডেল সেট হয়েছে।car2অবজেক্ট সেকেন্ডারি কন্সট্রাক্টর ব্যবহার করে তৈরি হয়েছে এবং মডেল ও বছরের তথ্য সেট হয়েছে।
উপসংহার
কটলিনে Constructors এবং Initializers ব্যবহার করে ক্লাসের অবজেক্ট তৈরি করা এবং প্রাথমিক মান সেট করা খুবই সহজ এবং সংক্ষিপ্ত। প্রাইমারি কন্সট্রাক্টর সাধারণত সাধারণ এবং সরাসরি ইনিশিয়ালাইজেশন কাজ করে, যেখানে সেকেন্ডারি কন্সট্রাক্টর অতিরিক্ত লজিক প্রয়োগে সহায়ক। Initializer Blocks ব্যবহার করে আপনি আরও জটিল ইনিশিয়ালাইজেশন কাজ করতে পারেন।