লুয়া (Lua) ভাষায় কো-রুটিন (Coroutines) একটি শক্তিশালী ফিচার যা কনকারেন্ট প্রোগ্রামিংয়ে ব্যবহৃত হয়। কো-রুটিনের মাধ্যমে একাধিক কার্যক্রম একসাথে (parallelly) পরিচালনা করা যায়, যেখানে প্রতিটি কো-রুটিন কার্যক্রম নির্দিষ্ট সময়ের জন্য সম্পাদিত হয় এবং পরবর্তীতে পুনরায় চালানো যায়। লুয়া কো-রুটিন তৈরি এবং ব্যবহারের জন্য coroutine.create এবং coroutine.resume ফাংশন ব্যবহার করা হয়।
এই টিউটোরিয়ালে আমরা লুয়া কো-রুটিন তৈরি এবং ব্যবহারের জন্য coroutine.create এবং coroutine.resume ফাংশনগুলির ব্যবহার দেখব।
১. coroutine.create
coroutine.create ফাংশন একটি কো-রুটিন তৈরি করে, যা একটি ফাংশনের আউটপুটকে একটি কো-রুটিন হিসেবে রিটার্ন করে। এই কো-রুটিনটি পরে coroutine.resume ফাংশন দ্বারা চালানো হয়।
সিনট্যাক্স:
co = coroutine.create(function)এখানে, একটি ফাংশন পাস করা হয় যা কো-রুটিনের কাজ হিসেবে সম্পাদিত হবে।
উদাহরণ:
-- কো-রুটিন তৈরি করা
co = coroutine.create(function ()
for i = 1, 3 do
print("Coroutine running: " .. i)
coroutine.yield() -- কো-রুটিনকে সাময়িকভাবে বিরতি দেয়া
end
end)এখানে, coroutine.create দিয়ে একটি কো-রুটিন তৈরি করা হয়েছে, যেটি একটি লুপে তিনবার "Coroutine running" বার্তা প্রিন্ট করবে এবং প্রতিবার coroutine.yield() দিয়ে থেমে যাবে।
২. coroutine.resume
coroutine.resume ফাংশন কো-রুটিন চালানোর জন্য ব্যবহৃত হয়। এটি একটি কো-রুটিন শুরু করে এবং একে চলমান রাখে যতক্ষণ না coroutine.yield() বা কো-রুটিনের কার্যক্রম সম্পূর্ণ হয়।
সিনট্যাক্স:
status, result = coroutine.resume(co)এখানে, status বুলিয়ান রিটার্ন করবে যা জানাবে কো-রুটিন সফলভাবে সম্পাদিত হয়েছে কি না এবং result হল কো-রুটিন থেকে রিটার্ন করা মান।
উদাহরণ:
-- কো-রুটিন চালানো
status, result = coroutine.resume(co) -- প্রথম বার চালানো
print(status) -- আউটপুট: true
status, result = coroutine.resume(co) -- দ্বিতীয় বার চালানো
print(status) -- আউটপুট: true
status, result = coroutine.resume(co) -- তৃতীয় বার চালানো
print(status) -- আউটপুট: trueএখানে, coroutine.resume(co) দিয়ে কো-রুটিনটি চালানো হচ্ছে এবং coroutine.yield() দ্বারা থেমে যাওয়ার পর দ্বিতীয় বার চালানো হচ্ছে।
৩. coroutine.yield
coroutine.yield() ফাংশন কো-রুটিনকে সাময়িকভাবে বিরতি দেয় এবং পরে এটি coroutine.resume দ্বারা পুনরায় চালানো হয়। এটি কো-রুটিনের ভিতরে যে কোন জায়গায় ব্যবহার করা যেতে পারে।
উদাহরণ:
-- কো-রুটিন তৈরি
co = coroutine.create(function ()
print("Start of Coroutine")
coroutine.yield() -- প্রথম বিরতি
print("Resumed first time")
coroutine.yield() -- দ্বিতীয় বিরতি
print("Resumed second time")
end)
-- কো-রুটিন চালানো
coroutine.resume(co) -- আউটপুট: Start of Coroutine
coroutine.resume(co) -- আউটপুট: Resumed first time
coroutine.resume(co) -- আউটপুট: Resumed second timeএখানে, কো-রুটিন প্রথম coroutine.yield() এর মাধ্যমে বিরতি নিচ্ছে এবং পরবর্তী সময়ে coroutine.resume(co) এর মাধ্যমে চালানো হচ্ছে।
৪. কো-রুটিনের স্ট্যাটাস এবং ফলাফল
coroutine.resume একটি স্ট্যাটাস এবং রিটার্ন ভ্যালু প্রদান করে। স্ট্যাটাস হলো বুলিয়ান (true বা false) যা জানায় কো-রুটিন সফলভাবে সম্পাদিত হয়েছে কি না। রিটার্ন ভ্যালু হলো কো-রুটিন থেকে রিটার্ন হওয়া ফলাফল।
উদাহরণ:
co = coroutine.create(function ()
return "Coroutine result"
end)
status, result = coroutine.resume(co)
print(status) -- আউটপুট: true
print(result) -- আউটপুট: Coroutine resultএখানে, কো-রুটিন একটি স্ট্রিং "Coroutine result" রিটার্ন করে এবং coroutine.resume সেই মান গ্রহণ করে।
সারসংক্ষেপ
লুয়া ভাষায় কো-রুটিন অত্যন্ত শক্তিশালী এবং নমনীয়। এটি একাধিক কার্যক্রম একসাথে (concurrently) চালাতে সাহায্য করে। কো-রুটিন তৈরি ও ব্যবহারের জন্য প্রধান ফাংশনগুলো হল:
coroutine.create: কো-রুটিন তৈরি করতে ব্যবহৃত হয়।coroutine.resume: কো-রুটিন চালানোর জন্য ব্যবহৃত হয়।coroutine.yield: কো-রুটিনকে সাময়িকভাবে বিরতি দেয়।coroutine.status: কো-রুটিনের স্ট্যাটাস জানায় (যেমন, রানিং, সাসপেন্ডেড, বা ডেড)।
এই ফাংশনগুলির মাধ্যমে আপনি কো-রুটিন ব্যবহার করে কোডের কার্যক্রম গতি বাড়াতে এবং সিঙ্ক্রোনাস কার্যক্রমকে আরও সহজভাবে পরিচালনা করতে পারেন।
Read more