লুয়া (Lua) ভাষা একটি ডাইনামিক এবং নমনীয় ভাষা, যেখানে কোনো বিল্ট-ইন ক্লাস বা অবজেক্ট ধারণা নেই। তবে, আপনি মেটাটেবিল (metatables) এবং টেবিল ব্যবহার করে নিজস্ব ক্লাস এবং অবজেক্ট তৈরি করতে পারেন। ক্লাস এবং অবজেক্ট তৈরি করতে লুয়া টেবিলের পদ্ধতি ব্যবহার করা হয়, এবং মেটামেথডসের মাধ্যমে তাদের আচরণ কাস্টমাইজ করা হয়।
এই টিউটোরিয়ালে আমরা লুয়া ভাষায় ক্লাস এবং অবজেক্ট তৈরি করার পদ্ধতি দেখব।
১. ক্লাস তৈরি করা
লুয়া ভাষায় ক্লাস তৈরি করতে সাধারণত একটি টেবিল ব্যবহার করা হয়। টেবিলকে মেটাটেবিলের সাথে অ্যাসোসিয়েট করা হয়, যা ক্লাসের ফাংশনগুলো সংরক্ষণ করে।
উদাহরণ: একটি সাধারণ Person ক্লাস তৈরি করা
Person = {}
Person.__index = Person -- ক্লাসের জন্য __index সেট করা
-- Constructor ফাংশন
function Person.new(name, age)
local self = setmetatable({}, Person) -- নতুন অবজেক্ট তৈরি এবং মেটাটেবিল অ্যাসোসিয়েট করা
self.name = name
self.age = age
return self
end
-- Method: greet
function Person:greet()
print("Hello, my name is " .. self.name .. " and I am " .. self.age .. " years old.")
endএখানে:
Personটেবিলটি ক্লাস হিসেবে ব্যবহৃত হচ্ছে।Person.newফাংশনটি কনস্ট্রাকটর হিসেবে কাজ করছে, যা নতুন অবজেক্ট তৈরি করে এবং মেটাটেবিল অ্যাসোসিয়েট করে।Person:greetএকটি মেথড যা অবজেক্টের বৈশিষ্ট্য ব্যবহার করে একটি মেসেজ প্রিন্ট করে।
২. অবজেক্ট তৈরি করা
ক্লাস তৈরি করার পর, আপনি Person.new ফাংশন ব্যবহার করে ক্লাসের অবজেক্ট তৈরি করতে পারেন।
উদাহরণ: Person ক্লাসের অবজেক্ট তৈরি এবং ব্যবহার
-- একটি Person অবজেক্ট তৈরি
local person1 = Person.new("John", 30)
-- অবজেক্টের মেথড কল করা
person1:greet() -- আউটপুট: Hello, my name is John and I am 30 years old.এখানে, person1 একটি অবজেক্ট যা Person ক্লাসের একটি উদাহরণ। এরপর person1:greet() মেথড কল করা হয়েছে, যা ওই অবজেক্টের তথ্য দেখাবে।
৩. একাধিক অবজেক্ট তৈরি করা
একাধিক অবজেক্ট তৈরি করার জন্য আপনি Person.new ফাংশনটি একাধিক বার কল করতে পারেন এবং প্রতিটি অবজেক্টের জন্য আলাদা বৈশিষ্ট্য প্রদান করতে পারেন।
উদাহরণ: একাধিক অবজেক্ট তৈরি
local person2 = Person.new("Alice", 25)
local person3 = Person.new("Bob", 40)
-- অবজেক্টের মেথড কল করা
person2:greet() -- আউটপুট: Hello, my name is Alice and I am 25 years old.
person3:greet() -- আউটপুট: Hello, my name is Bob and I am 40 years old.এখানে, দুটি নতুন অবজেক্ট person2 এবং person3 তৈরি করা হয়েছে, এবং তাদের পৃথক greet মেথড কল করা হয়েছে।
৪. ইনহেরিট্যান্স (Inheritance)
লুয়া ভাষায় ইনহেরিট্যান্স (Inheritance) বাস্তবায়ন করা যেতে পারে মেটাটেবিল ব্যবহার করে, যা একটি ক্লাসকে আরেকটি ক্লাসের বৈশিষ্ট্য দিতে সহায়তা করে।
উদাহরণ: Employee ক্লাস তৈরি এবং ইনহেরিট করা
-- Base class: Person
Person = {}
Person.__index = Person
function Person.new(name, age)
local self = setmetatable({}, Person)
self.name = name
self.age = age
return self
end
function Person:greet()
print("Hello, my name is " .. self.name .. " and I am " .. self.age .. " years old.")
end
-- Derived class: Employee (inherits from Person)
Employee = setmetatable({}, Person) -- Employee inherits Person
function Employee.new(name, age, job)
local self = Person.new(name, age) -- Calling the constructor of Person
setmetatable(self, Employee)
self.job = job
return self
end
function Employee:work()
print(self.name .. " is working as a " .. self.job)
endএখানে:
Employeeক্লাসটিPersonক্লাস থেকে ইনহেরিট করেছে।Employee.newফাংশনটিPerson.newফাংশনটি কল করে এবং অতিরিক্তjobবৈশিষ্ট্য যোগ করে।
উদাহরণ: ইনহেরিট্যান্স ব্যবহার
local employee1 = Employee.new("Alice", 28, "Engineer")
employee1:greet() -- আউটপুট: Hello, my name is Alice and I am 28 years old.
employee1:work() -- আউটপুট: Alice is working as a Engineerএখানে, employee1 অবজেক্টটি Employee ক্লাসের একটি উদাহরণ এবং এটি Person ক্লাসের greet মেথড এবং Employee ক্লাসের work মেথড ব্যবহার করছে।
সারসংক্ষেপ
লুয়া ভাষায় ক্লাস এবং অবজেক্ট তৈরি করতে টেবিল এবং মেটাটেবিল ব্যবহার করা হয়:
- ক্লাস একটি টেবিল হিসাবে তৈরি করা হয়, যেখানে কনস্ট্রাকটর এবং মেথড থাকে।
- অবজেক্ট তৈরি করার জন্য
newফাংশন ব্যবহার করা হয়, যা টেবিলের মেটাটেবিলের সাথে অ্যাসোসিয়েট থাকে। - ইনহেরিট্যান্স মেটাটেবিলের মাধ্যমে একটি ক্লাসকে অন্য ক্লাসের বৈশিষ্ট্য দেওয়া যায়।
এটি লুয়া ভাষায় অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) পদ্ধতি ব্যবহার করতে সাহায্য করে।
Read more