লুয়া (Lua) ভাষায় টেবিল (Table) হলো একমাত্র ডেটা স্ট্রাকচার যা বিভিন্ন ধরনের ডেটা সংরক্ষণ করতে পারে। লুয়া টেবিল দুটি প্রধান ধরনের হতে পারে: ইনডেক্সড টেবিল (Indexed Tables) এবং **অ্যাসোসিয়েটিভ টেবিল (Associative Tables)**। এই দুই ধরনের টেবিলের মধ্যে মূল পার্থক্য হলো কীভাবে মান (values) সংরক্ষিত এবং অ্যাক্সেস করা হয়।
এই টিউটোরিয়ালে আমরা ইনডেক্সড এবং অ্যাসোসিয়েটিভ টেবিল সম্পর্কে বিস্তারিত আলোচনা করব।
১. ইনডেক্সড টেবিল (Indexed Tables)
ইনডেক্সড টেবিল এমন একটি টেবিল যেখানে মানগুলো অ্যাক্সেস করা হয় ইন্টিজার ইনডেক্স বা অন্য যেকোনো সূচক ব্যবহার করে। এটি সাধারণত অ্যারে বা তালিকা (list) হিসাবে ব্যবহৃত হয়, যেখানে প্রতিটি আইটেম একটি নির্দিষ্ট পজিশন দ্বারা চিহ্নিত হয়।
উদাহরণ:
-- ইনডেক্সড টেবিল ডিফাইন করা
fruits = {"Apple", "Banana", "Orange"}
-- টেবিলের মান অ্যাক্সেস করা
print(fruits[1]) -- আউটপুট: Apple
print(fruits[2]) -- আউটপুট: Bananaএখানে, fruits একটি ইনডেক্সড টেবিল, যেখানে Apple, Banana, এবং Orange মানগুলো ইন্টিজার ইনডেক্স দ্বারা সংরক্ষিত হয়েছে (১, ২, ৩)।
ইনডেক্সড টেবিলের বৈশিষ্ট্য:
- ইনডেক্স সাধারণত ধারাবাহিকভাবে বৃদ্ধি পায় (১, ২, ৩, ...), কিন্তু আপনি এটি কাস্টম ইনডেক্স দিয়েও ব্যবহার করতে পারেন।
- ইনডেক্সড টেবিল মূলত অ্যারে বা সিকোয়েন্সের মতো ব্যবহার করা হয়, যেখানে আইটেমের সংখ্যা এবং ক্রম খুবই গুরুত্বপূর্ণ।
২. অ্যাসোসিয়েটিভ টেবিল (Associative Tables)
অ্যাসোসিয়েটিভ টেবিল হলো এমন একটি টেবিল যেখানে মানগুলো কী-ভ্যালু পেয়ার হিসেবে সংরক্ষিত হয়। এই ধরনের টেবিলের মধ্যে কী হতে পারে যে কোনো ধরনের ডেটা (ইন্টিজার, স্ট্রিং, বুলিয়ান ইত্যাদি), এবং মান হতে পারে কোনো ডেটা টাইপ।
উদাহরণ:
-- অ্যাসোসিয়েটিভ টেবিল ডিফাইন করা
person = {name = "John", age = 30, city = "New York"}
-- টেবিলের মান অ্যাক্সেস করা
print(person.name) -- আউটপুট: John
print(person["age"]) -- আউটপুট: 30এখানে, person একটি অ্যাসোসিয়েটিভ টেবিল, যেখানে name, age, এবং city হল কী, এবং তাদের মান যথাক্রমে "John", 30, এবং "New York"।
অ্যাসোসিয়েটিভ টেবিলের বৈশিষ্ট্য:
- কী-ভ্যালু পেয়ার হিসেবে মান সংরক্ষিত হয়। কী হতে পারে কোনো স্ট্রিং, ইন্টিজার বা অন্যান্য ডেটা টাইপ।
- অ্যাসোসিয়েটিভ টেবিলের মান অ্যাক্সেস করা হয় কী ব্যবহার করে, যা যেকোনো ডেটা টাইপ হতে পারে।
৩. ইনডেক্সড এবং অ্যাসোসিয়েটিভ টেবিলের পার্থক্য
| বৈশিষ্ট্য | ইনডেক্সড টেবিল | অ্যাসোসিয়েটিভ টেবিল |
|---|---|---|
| কী (Key) | সাধারণত ইন্টিজার ইনডেক্স | যেকোনো ধরনের ডেটা (স্ট্রিং, ইন্টিজার, ইত্যাদি) |
| মান (Value) | ধারাবাহিকভাবে অ্যাক্সেস করা হয় | কী-ভ্যালু পেয়ার হিসেবে অ্যাক্সেস করা হয় |
| ব্যবহার | সাধারণত অ্যারে বা সিকোয়েন্স | ম্যাপ বা অবজেক্ট হিসেবেও ব্যবহার করা হয় |
৪. টেবিলের অন্যান্য বৈশিষ্ট্য
টেবিলের মান পরিবর্তন
fruits = {"Apple", "Banana", "Orange"}
-- মান পরিবর্তন
fruits[1] = "Grapes"
print(fruits[1]) -- আউটপুট: Grapesএখানে, fruits[1] এর মান পরিবর্তন করা হয়েছে, এবং এখন এটি "Grapes"।
নতুন মান যোগ করা
person = {name = "Alice", age = 25}
-- নতুন মান যোগ করা
person.city = "Paris"
print(person.city) -- আউটপুট: Parisএখানে, person টেবিলে নতুন কী-ভ্যালু পেয়ার city = "Paris" যোগ করা হয়েছে।
সারসংক্ষেপ
লুয়া ভাষায় টেবিল একটি খুবই শক্তিশালী ডেটা স্ট্রাকচার, যা ইনডেক্সড টেবিল এবং অ্যাসোসিয়েটিভ টেবিল হিসেবে ব্যবহৃত হতে পারে।
- ইনডেক্সড টেবিল সাধারণত অ্যারে বা তালিকা হিসেবে ব্যবহৃত হয়, যেখানে মানগুলো ধারাবাহিকভাবে ইন্টিজার ইনডেক্স দিয়ে অ্যাক্সেস করা হয়।
- অ্যাসোসিয়েটিভ টেবিল কী-ভ্যালু পেয়ার হিসেবে ব্যবহার হয়, যেখানে কী হতে পারে যেকোনো ধরনের ডেটা এবং মান যেকোনো ডেটা টাইপ হতে পারে।
এই টেবিলগুলির মাধ্যমে লুয়া ভাষায় বিভিন্ন ধরনের ডেটা স্ট্রাকচার তৈরি করা সম্ভব, যা ডেভেলপারদের কোডের নমনীয়তা এবং কার্যকারিতা বাড়াতে সাহায্য করে।
Read more