ভ্যারিয়েবল প্রোগ্রামিং-এ একটি গুরুত্বপূর্ণ এবং সর্বত্রব্যাপী কনসেপ্ট। ভ্যারিয়েবল হলো ডেটা সংরক্ষণের কন্টেইনার। ভ্যারিয়েবল অনেক ধরনের ডেটা সংরক্ষণ করতে পারে, যার মধ্যে রয়েছে ইউজারনেম, ইমেইল অ্যাড্রেস, এবং ইউজারের অনলাইন গেম ইনভেন্টরির আইটেম।
পাইথনে প্রোগ্রামিং করার সময়, আপনি দুটি টাইপের ভ্যারিয়েবল সম্মুখীন হবেন: গ্লোবাল এবং লোকাল। এই গাইডে, আমরা এই দুটি টাইপের ভ্যারিয়েবলের পার্থক্য, সেগুলো কীভাবে কাজ করে, এবং আপনি আপনার কোডে সেগুলো কীভাবে ব্যবহার করতে পারেন তা আলোচনা করব।
পাইথন ভ্যারিয়েবল
পাইথনে, ভ্যারিয়েবল الأصلية আপনাকে ডেটা লেবেল এবং সংরক্ষণ করতে দেয়। একটি ভ্যারিয়েবল ডিফাইন করার সময়, আপনি সেটি একটি নাম দিবেন। আপনি তারপর আপনার কোডে পরে সেই নামটি ব্যবহার করে সেটি যে ডেটাকে রিপ্রেজেন্ট করে তা রিট্রিভ করতে পারেন। ভ্যারিয়েবল স্ট্রিং, নম্বর, লিস্ট, বা যেকোনো অন্য ডেটা টাইপ সংরক্ষণ করতে পারে।
ধরুন, আমরা একটি গেম বানাচ্ছি এবং ইউজারের নাম সংরক্ষণ করতে চাই। প্রোগ্রামে বারবার নাম টাইপ করার বদলে, আমরা একটি ভ্যারিয়েবল ব্যবহার করে সেটি সংরক্ষণ করতে পারি।
একটি গেমের জন্য ইউজারের নাম সংরক্ষণকারী একটি ভ্যারিয়েবল:
name = "Carlton Hernandez"
আমরা name নামে একটি ভ্যারিয়েবল ডিক্লেয়ার করেছি এবং এটিকে "Carlton Hernandez" ভ্যালু অ্যাসাইন করেছি।
এখন যেহেতু আমরা সেটি ডিক্লেয়ার করেছি, আমরা আমাদের কোডে সেটি ম্যানিপুলেট করতে পারি। উদাহরণস্বরূপ, আমরা যদি আমাদের ইউজারের নাম পরিবর্তন করতে চাই, নিচের কোড দিয়ে করতে পারি:
name = "Carlton Hernandez" name = "Carlton Lewis Hernandez"
আমাদের কোডের প্রথম লাইনে, আমরা name ভ্যারিয়েবলে "Carlton Hernandez" ভ্যালু অ্যাসাইন করেছি। তারপর, আমরা name ভ্যারিয়েবলে "Carlton Lewis Hernandez" ভ্যালু অ্যাসাইন করেছি। আপনি যখন একটি ভ্যারিয়েবলে নতুন ভ্যালু অ্যাসাইন করেন, প্রোগ্রাম সবচেয়ে недавের ভ্যালু ওভাররাইট করে, সেটিকে নতুনটিতে রিপ্লেস করে।
পাইথন গ্লোবাল ভ্যারিয়েবল
পাইথনে, মূলত দুটি টাইপের ভ্যারিয়েবল রয়েছে: লোকাল এবং গ্লোবাল।
গ্লোবাল ভ্যারিয়েবল হলো ফাংশনের বাইরে ডিক্লেয়ার করা ভ্যারিয়েবল। গ্লোবাল ভ্যারিয়েবলদের গ্লোবাল স্কোপ রয়েছে। এর মানে সেগুলো পুরো প্রোগ্রামে অ্যাক্সেস করা যায়, ফাংশনের ভিতরেও। এই কনসেপ্টের ভিজ্যুয়াল রিপ্রেজেন্টেশন নিচে দেওয়া হলো।
পাইথনে গ্লোবাল এবং লোকাল ভ্যারিয়েবল
একটি গ্লোবাল ভ্যারিয়েবল পুরো প্রোগ্রামে অ্যাক্সেস করা যায়।
পাইথনে গ্লোবাল ভ্যারিয়েবলের একটি উদাহরণ:
name = "Carlton Hernandez"
একবার গ্লোবাল ভ্যারিয়েবল ডিক্লেয়ার করলে, আমরা সেটি আমাদের কোডে সর্বত্র ব্যবহার করতে পারি। উদাহরণস্বরূপ, আমরা একটি ফাংশন তৈরি করতে পারি যা আমাদের গ্লোবাল ভ্যারিয়েবল name এর ধারন করা ভ্যালু প্রিন্ট করবে নিচের কোড দিয়ে:
def printName():
print(name)
printName()
আমাদের কোড রিটার্ন করে:
"Carlton Hernandez"
এখানে, আমরা printName() নামে একটি ফাংশন ইনিশিয়ালাইজ করেছি। এই ফাংশন, যখন ইনভোক করা হয়, name ভ্যারিয়েবলের ভ্যালু কনসোলে প্রিন্ট করে। উপরে ফাংশন ইনভোক করার সময় यही ঘটল।
পাইথন লোকাল ভ্যারিয়েবল
অন্যদিকে, লোকাল ভ্যারিয়েবল হলো ফাংশনের ভিতরে ডিক্লেয়ার করা ভ্যারিয়েবল। এই ভ্যারিয়েবলগুলো local scope avere বলে जाता है। এর মানে সেগুলো শুধু সেটি যেখানে ডিক্লেয়ার করা হয়েছে সেটি ফাংশনের ভিতরেই অ্যাক্সেস করা যায়। আবার আগে দেখানো ভিজ্যুয়াল রিপ্রেজেন্টেশন দেখি যা পাইথনে ভ্যারিয়েবল কনসেপ্ট ডিপিক্ট করে:
গ্লোবাল এবং লোকাল ভ্যারিয়েবল
একটি লোকাল ভ্যারিয়েবল শুধু একটি নির্দিষ্ট ফাংশনের ভিতরে অ্যাক্সেস করা যায়।
লোকাল ভ্যারিয়েবল ব্যবহার করে একটি প্রোগ্রামের উদাহরণ নিচে:
def printName():
name = "Georgia Anderson"
print(name)
printName()
আমাদের কোড রিটার্ন করে:
"Georgia Anderson"
আমাদের কোডে, আমরা printName() নামে একটি ফাংশন ডিক্লেয়ার করেছি। সেটির ভিতরে, আমরা name নামে একটি ভ্যারিয়েবল ডিফাইন করেছি। কারণ আমরা এই ভ্যারিয়েবলটি একটি ফাংশনের ভিতরে ডিক্লেয়ার করেছি, এটি একটি লোকাল ভ্যারিয়েবল।
আমাদের কোডের শেষে, আমরা printName() ব্যবহার করে আমাদের ফাংশন কল করেছি। প্রতিক্রিয়া হিসেবে, প্রোগ্রাম printName() ফাংশন এক্সিকিউট করল।
এই উদাহরণে name ভ্যারিয়েবল printName() ফাংশনের জন্য লোকাল। তাই, আমরা আমাদের ফাংশনের বাইরে সেই ভ্যারিয়েবল অ্যাক্সেস করতে পারি না। লোকাল name ভ্যারিয়েবল ফাংশনের বাইরে প্রিন্ট করার চেষ্টা করলে কী হয় সেটি দেখুন:
def printName():
name = "Georgia Anderson"
print(name)
printName()
print(name)
আমাদের কোড রিটার্ন করে:
NameError: name 'name' is not defined
আমরা লোকাল ভ্যারিয়েবলটি সেটি যেখানে অ্যাসাইন করা হয়েছে সেটি ফাংশনের বাইরে অ্যাক্সেস করতে পারি না। যখন আমরা আমাদের মেইন প্রোগ্রামে একটি লোকাল ভ্যারিয়েবল অ্যাক্সেস করার চেষ্টা করি, প্রোগ্রাম একটি এরর রিটার্ন করে।
গ্লোবাল এবং লোকাল ভ্যারিয়েবল ব্যবহার করা
একই প্রোগ্রামে একই ভ্যারিয়েবল নাম ব্যবহার করা সম্ভব গ্লোবাল এবং লোকাল ভ্যারিয়েবল উভয়ের জন্য। এমন পরিস্থিতিতে, লোকাল ভ্যারিয়েবল লোকাল স্কোপে পড়া হবে, এবং গ্লোবাল ভ্যারিয়েবল গ্লোবাল স্কোপে পড়া হবে।
একই নামে লোকাল এবং গ্লোবাল ভ্যারিয়েবল থাকা প্রোগ্রামের উদাহরণ:
score = 5
def calculateScore():
score = 10
print("Final Score:", score)
calculateScore()
print("Initial Score:", score)
আমাদের কোড রিটার্ন করে:
Final Score: 10 Initial Score: 5
প্রথমে, আমরা আমাদের কোডে গ্লোবাল ভ্যারিয়েবল score অ্যাসাইন করেছি। তারপর, আমাদের calculateScore() ফাংশনে, আমরা একই নামে একটি লোকাল ভ্যারিয়েবল তৈরি করেছি।
calculateScore() ফাংশনে আমাদের লোকাল score ভ্যারিয়েবলের ভ্যালু ১০। তাই, যখন আমরা আমাদের calculateScore() ফাংশন কল করি, Final Score: 10 মেসেজ কনসোলে প্রিন্ট হয়।
তবে, আমাদের calculateScore() ফাংশনের বাইরে, score ভ্যারিয়েবলের ভ্যালু ৫। এর কারণ হলো আমরা গ্লোবাল স্কোপে score ভ্যারিয়েবলের ভ্যালু ৫ সেট করেছি। তাই, যখন আমরা Initial Score: প্রিন্ট করি, তারপর score ভ্যারিয়েবলের ভ্যালু, প্রোগ্রাম ৫ দেখাচ্ছে।
ফাংশনের ভিতরে গ্লোবাল ভ্যারিয়েবল অ্যাসাইন করা
উপরের সেকশনগুলোতে, আমরা শিখেছি যে গ্লোবাল ভ্যারিয়েবল ফাংশনের বাইরে ডিফাইন করা হয় (অর্থাৎ, গ্লোবালি), এবং লোকাল ভ্যারিয়েবল ফাংশনের ভিতরে ডিফাইন করা হয় (অর্থাৎ, লোকালি)। কিন্তু, আপনি যদি global কীওয়ার্ড ব্যবহার করে একটি ফাংশনের ভিতরে (অর্থাৎ, লোকালি) একটি ভ্যারিয়েবল ডিফাইন করেন, এবং তারপর সেই ফাংশনটি প্রোগ্রামে (গ্লোবালি) রান করেন, তবে সেই ভ্যারিয়েবলটি একটি গ্লোবাল ভ্যারিয়েবল হয়ে যাবে।
নিচের উদাহরণ বিবেচনা করুন:
def setName():
global name
name = "Bianca Peterson"
setName()
print(name)
আমাদের কোড রিটার্ন:
"Bianca Peterson"
আমাদের কোডে, আমরা name ভ্যারিয়েবলের ভ্যালু লোকালি অ্যাসাইন করেছি, setName() ফাংশনের ভিতরে। তবে, কারণ আমরা এই ভ্যারিয়েবল ডিফাইন করার আগে global কীওয়ার্ড ব্যবহার করেছি, আমরা name ভ্যারিয়েবলকে গ্লোবাল স্কোপ দিতে প্রস্তুত করেছি। তবে, name ভ্যারিয়েবলটি শুধু আমরা এই ফাংশনটি প্রোগ্রামে রান করার পরে গ্লোবাল ভ্যারিয়েবল হবে।
প্রোগ্রাম setName() ফাংশন রান করার পরে, যেকোনো সময় আমরা আমাদের প্রোগ্রামে name ভ্যারিয়েবল ব্যবহার করি, যেমন আমরা print() ফাংশন রান করলাম, প্রোগ্রাম লোকাল ফাংশনে ডিক্লেয়ার করা ভ্যালু ব্যবহার করবে। এটার কারণ হলো name ভ্যারিয়েবলটি এখন একটি গ্লোবাল ভ্যারিয়েবল।
মনে রাখবেন আগে আমরা বলেছিলাম যে আপনি সরাসরি ফাংশনের ভিতরে একটি গ্লোবাল ভ্যারিয়েবল পরিবর্তন করতে পারবেন না? সেটি সত্য। তবে, আপনি global কীওয়ার্ড ব্যবহার করে ইনডাইরেক্টলি একটি ফাংশনের ভিতরে গ্লোবাল ভ্যারিয়েবল পরিবর্তন করতে পারেন।
global কীওয়ার্ড ফাংশনে ব্যবহার করে গ্লোবাল ভ্যারিয়েবলের ভ্যালু পরিবর্তন করা প্রোগ্রামের উদাহরণ:
name = "Bianca Peterson"
def setName():
global name
name = "Bianca Lucinda Peterson"
setName()
print(name)
আমাদের কোড রিটার্ন:
"Bianca Lucinda Peterson"
এই কোড ব্রেক ডাউন করি। প্রথমে, আমরা name নামে একটি ভ্যারিয়েবল ডিক্লেয়ার করেছি এবং এটিকে "Bianca Peterson" ভ্যালু অ্যাসাইন করেছি। এটি একটি গ্লোবাল ভ্যারিয়েবল। তারপর, আমরা setName() নামে একটি ফাংশন ডিক্লেয়ার করেছি। কল করা হলে, setName() ফাংশন name ভ্যারিয়েবলের ভ্যালু পরিবর্তন করে।
তারপর, আমরা setName() ফাংশন কল করেছি, যেটি name এর ভ্যালু "Bianca Lucinda Peterson" এ পরিবর্তন করল। শেষে, আমরা name এর ভ্যালু কনসোলে প্রিন্ট করেছি। গ্লোবাল ভ্যারিয়েবল name এর ভ্যালু এখন "Bianca Lucinda Peterson"।
সাধারণত, global কীওয়ার্ড স্পেয়ারিংলি ব্যবহার করা উচিত। global কীওয়ার্ড খুব বেশি ব্যবহার করলে প্রোগ্রামে ভ্যারিয়েবলের স্কোপ বুঝতে কঠিন হয়।
উপসংহার
গ্লোবাল ভ্যারিয়েবল হলো ফাংশনের বাইরে ডিক্লেয়ার করা ভ্যারিয়েবল। লোকাল ভ্যারিয়েবল হলো ফাংশনের ভিতরে ডিক্লেয়ার করা ভ্যারিয়েবল।
যদিও গ্লোবাল ভ্যারিয়েবল সরাসরি ফাংশনে পরিবর্তন করা যায় না, আপনি global কীওয়ার্ড ব্যবহার করে একটি ফাংশন তৈরি করতে পারেন যা গ্লোবাল ভ্যারিয়েবলের ভ্যালু পরিবর্তন করবে। এই কেসে, গ্লোবাল ভ্যারিয়েবলের ভ্যালু আসলে পরিবর্তন হবে না যতক্ষণ না আপনি সেই ফাংশনটি রান করেন।
এই টিউটোরিয়ালে, উদাহরণের রেফারেন্স দিয়ে লোকাল এবং গ্লোবাল ভ্যারিয়েবলের বেসিকস এবং সেগুলো কীভাবে কাজ করে তা আলোচনা করা হয়েছে। এখন আপনি প্রফেশনাল প্রোগ্রামারের মত আপনার পাইথন কোডে লোকাল এবং গ্লোবাল ভ্যারিয়েবল ব্যবহার করার জন্য প্রস্তুত!