Solidity তে mapping এবং structs দুটি গুরুত্বপূর্ণ ডেটা স্ট্রাকচার যা স্মার্ট কন্ট্রাক্টে ডেটা সংরক্ষণ এবং পরিচালনার জন্য ব্যবহৃত হয়। এই দুটি ডেটা স্ট্রাকচার ব্লকচেইনে ডেটার সঠিকভাবে সংরক্ষণ এবং অ্যাক্সেস নিশ্চিত করতে সহায়তা করে। চলুন, দেখি কীভাবে এগুলি কাজ করে এবং কীভাবে ব্যবহার করা হয়।
Mapping
Mapping একটি অ্যাসোসিয়েটিভ অ্যারে বা ডিকশনারি ধরনের ডেটা স্ট্রাকচার যা একটি কী (key) এর মাধ্যমে মান (value) অ্যাক্সেস করতে সহায়তা করে। এটি একটি key-value পেয়ার হিসেবে কাজ করে যেখানে প্রতিটি key এর সাথে একটি value যুক্ত থাকে। Mapping কে সাধারণত ব্লকচেইনে ডেটা অ্যাসোসিয়েট করতে ব্যবহৃত হয়, যেমন ব্যবহারকারীদের ব্যালেন্স ট্র্যাক করা বা ইউজার আইডি অনুযায়ী তথ্য সংরক্ষণ করা।
Mapping এর বৈশিষ্ট্য:
- স্টেট ভেরিয়েবল: Mapping শুধুমাত্র স্টেট ভেরিয়েবল হিসেবে ব্যবহৃত হতে পারে। এটি ফাংশনের ভিতরে ব্যবহার করা যায় না।
- ডায়নামিক সাইজ: Mapping এর সাইজ নির্দিষ্ট করা হয় না, অর্থাৎ এটি ডায়নামিকভাবে বড় হতে পারে।
- ডিফল্ট ভ্যালু: যখন কোন key এর জন্য মান অ্যাসাইন করা হয় না, তখন তা ডিফল্ট মান নেবে (যেমন, একটি
uintটাইপের ক্ষেত্রে তা ০ হবে)।
Mapping এর উদাহরণ:
pragma solidity ^0.8.0;
contract Example {
mapping(address => uint) public balances; // address কে key হিসাবে ব্যবহার করা হচ্ছে
// ফাংশন যা ইউজারের ব্যালেন্স যোগ করবে
function deposit() public payable {
balances[msg.sender] += msg.value; // senders address এর ব্যালেন্স বৃদ্ধি করবে
}
// ফাংশন যা ইউজারের ব্যালেন্স রিটার্ন করবে
function getBalance(address user) public view returns (uint) {
return balances[user];
}
}এখানে:
mapping(address => uint)এটি একটিaddressকে key হিসেবে ব্যবহার করছে এবং এর জন্য একটিuintটাইপের value অ্যাসাইন করছে।balances[msg.sender] += msg.value;এর মাধ্যমে প্রত্যেক ব্যবহারকারীর ব্যালেন্সmsg.sender(ব্যবহারকারীর ঠিকানা) অনুযায়ী বাড়ানো হচ্ছে।
Structs
Structs হল একটি কাস্টম ডেটা টাইপ যা একাধিক ডেটা টাইপের মান একত্রিত করে। এটি বিভিন্ন ডেটা টাইপের ভ্যালু একত্রিত করার জন্য ব্যবহৃত হয়। Structs ব্যবহার করে একাধিক ভিন্ন ভিন্ন ডেটা প্যাকেজ হিসেবে তৈরি করা যায়, যেমন একটি ব্যবহারকারীর নাম, বয়স এবং ঠিকানা।
Structs এর বৈশিষ্ট্য:
- কাস্টম ডেটা টাইপ: Structs দিয়ে আপনি নিজের প্রয়োজন অনুযায়ী একটি কাস্টম ডেটা টাইপ তৈরি করতে পারেন।
- ডায়নামিক এবং স্ট্যাটিক: Structs ডায়নামিকভাবে তৈরি করা যায়, এবং প্রতিটি স্ট্রাক্টে ভিন্ন ভিন্ন ডেটা টাইপ থাকতে পারে।
- স্টোরেজ: Structs কেবলমাত্র স্টোরেজে রাখা যেতে পারে এবং তা স্মার্ট কন্ট্রাক্টের স্টেটের অংশ হিসেবে সংরক্ষিত থাকে।
Structs এর উদাহরণ:
pragma solidity ^0.8.0;
contract Example {
struct Person {
string name;
uint age;
address addr;
}
mapping(address => Person) public people;
// ফাংশন যা একটি নতুন Person এন্ট্রি তৈরি করবে
function addPerson(string memory _name, uint _age) public {
people[msg.sender] = Person(_name, _age, msg.sender);
}
// ফাংশন যা একটি Person এর তথ্য দেখাবে
function getPerson(address _addr) public view returns (string memory, uint, address) {
Person memory p = people[_addr];
return (p.name, p.age, p.addr);
}
}এখানে:
struct Personদিয়ে আমরা একটিPersonনামক কাস্টম ডেটা টাইপ তৈরি করেছি, যাname,ageএবংaddr(ঠিকানা) ভ্যালু ধারণ করে।mapping(address => Person)এর মাধ্যমে আমরা প্রতিটি ঠিকানার সাথে একটিPersonstruct সংযুক্ত করেছি, যাতে ব্যবহারকারীর তথ্য সংরক্ষিত থাকে।addPersonফাংশনে, ব্যবহারকারী তাদের নাম এবং বয়স যুক্ত করতে পারে এবং সেগুলিPersonstruct এ স্টোর করা হবে।
Mapping এবং Structs এর মধ্যে পার্থক্য
| পার্থক্য | Mapping | Structs |
|---|---|---|
| ডেটা স্ট্রাকচার | Key-value পেয়ার | কাস্টম ডেটা টাইপ, একাধিক ডেটা একত্রিত করে |
| ব্যবহার | একক মান অ্যাসোসিয়েট করতে ব্যবহৃত হয় | একাধিক মান একত্রিত করতে ব্যবহৃত হয় |
| ফাংশনের মধ্যে ব্যবহার | ফাংশনের বাইরে স্টেট ভেরিয়েবল হিসেবে ব্যবহৃত | Struct ফাংশনের মধ্যে ব্যবহার করা যায় |
| ডিফল্ট ভ্যালু | ডিফল্ট মান থাকবে যদি কোন key-এর মান না থাকে | Struct এর প্রতিটি ফিল্ডে ডিফল্ট মান থাকে |
| অ্যাক্সেস পদ্ধতি | mapping[key] দিয়ে অ্যাক্সেস করা হয় | struct এর ফিল্ড অ্যাক্সেস করা হয় |
সারাংশ
Mapping এবং Structs হল Solidity তে দুটি অত্যন্ত গুরুত্বপূর্ণ ডেটা স্ট্রাকচার যা স্মার্ট কন্ট্রাক্টের কার্যকারিতা বাড়াতে ব্যবহৃত হয়। Mapping ডেটার key-value পেয়ার সংরক্ষণ করতে সাহায্য করে এবং Structs বিভিন্ন ধরনের ডেটা একত্রিত করতে ব্যবহৃত হয়। Mapping সাধারণত স্টোরেজের জন্য ব্যবহার করা হয়, যেখানে Structs কাস্টম ডেটা টাইপ তৈরি করতে সহায়তা করে। এই দুটি ডেটা স্ট্রাকচার Solidity এর মধ্যে ডেটার সঠিকভাবে সংরক্ষণ এবং ব্যবস্থাপনা করার জন্য অপরিহার্য।
Read more