Solidity তে, state variables এবং local variables দুটি গুরুত্বপূর্ণ ধরনের ভেরিয়েবল ব্যবহৃত হয়, যা স্মার্ট কন্ট্রাক্টে ডেটা সংরক্ষণ এবং পরিচালনার জন্য বিভিন্নভাবে কাজ করে। এই দুটি ভেরিয়েবলের মধ্যে পার্থক্য বুঝতে হলে, প্রথমে তাদের গঠন এবং কার্যকারিতা সম্পর্কে জানাটা প্রয়োজন।
State Variables
State variables হল সেই ভেরিয়েবলগুলো যেগুলি ব্লকচেইনে স্থায়ীভাবে সংরক্ষিত থাকে। এগুলি স্মার্ট কন্ট্রাক্টের মূল স্টেট বা ডেটার অংশ হিসেবে কাজ করে। যখনই একটি ফাংশন state variable এর মান পরিবর্তন করে, তখন সেটি ব্লকচেইনে সংরক্ষিত হয় এবং চিরকালীন থাকে যতক্ষণ না স্মার্ট কন্ট্রাক্টটি ডিপ্লয় করা থাকে।
State variables এর কিছু বৈশিষ্ট্য:
- ব্লকচেইনে সংরক্ষিত: যখনই একটি state variable এর মান পরিবর্তন হয়, এটি ব্লকচেইনে স্থায়ীভাবে সংরক্ষিত হয়।
- স্টোরেজে রাখা হয়: এগুলি স্টোরেজে সংরক্ষিত থাকে, যা কিছুটা ব্যয়বহুল হতে পারে (গ্যাস খরচ বেশি হয়)।
- public: যখন একটি state variable
publicহিসেবে ডিফাইন করা হয়, তখন Solidity স্বয়ংক্রিয়ভাবে getter ফাংশন তৈরি করে, যা ব্যবহারকারীদের মাধ্যমে ভেরিয়েবলটির মান অ্যাক্সেস করা যায়।
উদাহরণ:
pragma solidity ^0.8.0;
contract Example {
uint public number; // state variable
function setNumber(uint _number) public {
number = _number; // state variable update
}
function getNumber() public view returns (uint) {
return number; // state variable access
}
}এখানে number একটি state variable, যা setNumber ফাংশন দিয়ে পরিবর্তন করা হয় এবং getNumber ফাংশন দিয়ে অ্যাক্সেস করা হয়।
Local Variables
Local variables হল সেই ভেরিয়েবলগুলো যেগুলি শুধুমাত্র ফাংশনের ভিতরে ব্যবহার করা হয় এবং ফাংশন শেষ হলে সেগুলি মুছে যায়। এগুলি কেবলমাত্র ফাংশনের execution context এ বিদ্যমান থাকে এবং স্মার্ট কন্ট্রাক্টের ব্লকচেইন স্টোরেজে সংরক্ষিত হয় না।
Local variables এর কিছু বৈশিষ্ট্য:
- ফাংশনের মধ্যে সংরক্ষিত: এগুলি শুধুমাত্র ফাংশনের execution সময়কালীন উপলব্ধ থাকে এবং ফাংশন শেষ হলে সেগুলি ডিলিট হয়ে যায়।
- স্টোরেজে রাখা হয় না: এগুলি স্টোরেজে সংরক্ষিত হয় না, ফলে গ্যাস খরচও কম হয়।
- আরেকটি ফাংশনে অ্যাক্সেস করা যায় না: একটি ফাংশনের local variable অন্য কোনো ফাংশন থেকে অ্যাক্সেস করা যায় না।
উদাহরণ:
pragma solidity ^0.8.0;
contract Example {
uint public number; // state variable
function setNumber(uint _number) public {
uint temp = _number; // local variable
number = temp; // state variable update
}
function getNumber() public view returns (uint) {
return number; // state variable access
}
}এখানে temp একটি local variable, যা setNumber ফাংশনের ভিতরে ব্যবহার করা হয় এবং number state variable এর মান পরিবর্তন করা হয়।
State Variables এবং Local Variables এর মধ্যে পার্থক্য
| পার্থক্য | State Variables | Local Variables |
|---|---|---|
| সংরক্ষণ | ব্লকচেইনে স্থায়ীভাবে সংরক্ষিত | শুধুমাত্র ফাংশনের execution সময়কালে থাকে |
| স্টোরেজ | স্টোরেজে রাখা হয় | স্ট্যাক (stack) এ রাখা হয় |
| গ্যাস খরচ | বেশি গ্যাস খরচ (ব্লকচেইনে সংরক্ষিত থাকে) | কম গ্যাস খরচ (স্টোরেজে সংরক্ষিত হয় না) |
| অ্যাক্সেস | ফাংশনের বাইরে থেকেও অ্যাক্সেস করা যায় | ফাংশনের বাইরে অ্যাক্সেস করা যায় না |
| পাবলিক | পাবলিক হলে স্বয়ংক্রিয়ভাবে getter ফাংশন তৈরি হয় | পাবলিক নয় |
সারাংশ
State variables হল স্মার্ট কন্ট্রাক্টের ব্লকচেইনে স্থায়ীভাবে সংরক্ষিত ভেরিয়েবল, যেগুলি স্টোরেজে রাখা হয় এবং ফাংশনগুলো এগুলির মান পরিবর্তন করতে পারে। অন্যদিকে, local variables হল শুধুমাত্র ফাংশনের ভিতরে ব্যবহার করা হয় এবং ফাংশন সম্পন্ন হওয়ার পর মুছে যায়। State variables এর গ্যাস খরচ বেশি হলেও এগুলি ব্লকচেইনে দীর্ঘ সময়ের জন্য সংরক্ষিত থাকে, তবে local variables দ্রুত এবং কম গ্যাস খরচে কাজ করে।
Read more