Data Types এবং Arrays (ডেটা টাইপ এবং অ্যারে)

সলিডিটি (Solidity) - Computer Programming

365

Solidity তে ডেটা টাইপ এবং অ্যারে ব্যবহৃত হয় বিভিন্ন ধরণের ডেটা সংরক্ষণ করতে, যা স্মার্ট কন্ট্রাক্টের কার্যক্রম পরিচালনা করে। Solidity তে বিভিন্ন ধরনের ডেটা টাইপ এবং অ্যারে রয়েছে, যা স্মার্ট কন্ট্রাক্টের মধ্যে বিভিন্ন প্রকারের ডেটা সংরক্ষণ ও প্রক্রিয়াকরণ করতে ব্যবহৃত হয়।


১. ডেটা টাইপ (Data Types)

Solidity তে ডেটা টাইপ দুটি প্রধান বিভাগে ভাগ করা যায়:

  1. Value Types (মূল্য টাইপ)
  2. Reference Types (রেফারেন্স টাইপ)
Value Types (মূল্য টাইপ)

Value types সেগুলি যা স্টোরেজে মূল ডেটার মান সংরক্ষণ করে। যখন একটি value type ডেটা কোন পরিবর্তনশীল বা ফাংশন প্যারামিটার হিসেবে পাঠানো হয়, তখন ডেটার কপি তৈরি হয়।

  • uint (Unsigned Integer): সাইনহীন পূর্ণসংখ্যা (যেমন 0, 1, 100)। Solidity তে সাধারণত uint256 ব্যবহৃত হয়, কিন্তু আপনি uint8, uint16 ইত্যাদি ছোট সাইজের সংখ্যা টাইপও ব্যবহার করতে পারেন।

    uint256 public balance;
    uint8 public smallNumber;
  • int (Signed Integer): সাইনযুক্ত পূর্ণসংখ্যা, যেমন -1, 0, 100।

    int256 public temperature;
  • address: Ethereum অ্যাকাউন্টের ঠিকানা সংরক্ষণের জন্য ব্যবহৃত হয়।

    address public owner;
  • bool: একটি সত্য বা মিথ্যা (true/false) মান সংরক্ষণের জন্য ব্যবহৃত হয়।

    bool public isActive;
  • bytes: ডেটা সংরক্ষণের জন্য ব্যবহৃত ফিক্সড সাইজের বাইনারি ডেটা টাইপ।

    bytes32 public data;
Reference Types (রেফারেন্স টাইপ)

Reference types হল সেই টাইপগুলি যা মেমরিতে একটি রেফারেন্স সংরক্ষণ করে, যেখানে ডেটা মূলত সংরক্ষিত হয়। যখন একটি reference type ডেটা অন্য কোথাও পাস করা হয়, তখন সেই ডেটার কপি তৈরি না হয়ে আসল রেফারেন্স পাস হয়।

  • string: টেক্সট বা স্ট্রিং ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়।

    string public name;
  • array: একাধিক মান একত্রে সংরক্ষণ করতে ব্যবহৃত হয়। অ্যারে দুটি ধরনের হতে পারে:

    • Fixed-size Array: অ্যারের সাইজ নির্দিষ্ট থাকে।
    • Dynamic Array: অ্যারের সাইজ চলাকালীন সময়ে পরিবর্তনযোগ্য।
    uint256[] public numbers;  // Dynamic array
    uint256[5] public fixedNumbers;  // Fixed-size array
  • mapping: একটি কী-ভ্যালু পেয়ার ডেটা স্টোরেজ, যেটি একটি নির্দিষ্ট কী এর সাথে মান সংরক্ষণ করে।

    mapping(address => uint256) public balanceOf;

২. Arrays (অ্যারে)

Solidity তে অ্যারে একটি ডেটা টাইপ যা একাধিক মান একত্রে সংরক্ষণ করতে ব্যবহৃত হয়। অ্যারে সাধারণত একই ধরনের ডেটা আইটেম রাখে, যেমন সমস্ত সংখ্যা বা সমস্ত ঠিকানা।

Fixed-size Array (ফিক্সড সাইজ অ্যারে)

ফিক্সড সাইজ অ্যারে একটি নির্দিষ্ট সাইজের হয়, অর্থাৎ একটি নির্দিষ্ট সংখ্যক উপাদান ধারণ করতে পারে। এটি ডিক্লেয়ার করার সময় সাইজ নির্ধারণ করতে হয়।

pragma solidity ^0.8.0;

contract FixedArrayExample {
    uint256[3] public numbers;  // A fixed-size array with 3 elements

    function setNumbers() public {
        numbers[0] = 10;
        numbers[1] = 20;
        numbers[2] = 30;
    }

    function getNumbers() public view returns (uint256[3] memory) {
        return numbers;
    }
}
Dynamic Array (ডাইনামিক অ্যারে)

ডাইনামিক অ্যারে সাইজের ক্ষেত্রে সীমাবদ্ধ নয় এবং কোড চলাকালীন সময়ে এর সাইজ পরিবর্তন করা যায়।

pragma solidity ^0.8.0;

contract DynamicArrayExample {
    uint256[] public numbers;  // A dynamic array

    function addNumber(uint256 _number) public {
        numbers.push(_number);  // Adds a new number to the array
    }

    function getNumbers() public view returns (uint256[] memory) {
        return numbers;  // Returns the entire array
    }

    function removeLastNumber() public {
        numbers.pop();  // Removes the last number from the array
    }
}
  • push(): নতুন উপাদান অ্যারেতে যোগ করতে ব্যবহৃত হয়।
  • pop(): অ্যারের শেষ থেকে একটি উপাদান অপসারণ করতে ব্যবহৃত হয়।

৩. Mappings (ম্যাপিংস)

Solidity তে mapping একটি বিশেষ ধরনের রেফারেন্স টাইপ, যা একটি কী-ভ্যালু পেয়ার সংরক্ষণ করতে ব্যবহৃত হয়। এটি সাধারণত ডেটা সংগ্রহের জন্য ব্যবহৃত হয়, যেখানে কীগুলি একক এবং ভ্যালুগুলি পরিবর্তনশীল।

pragma solidity ^0.8.0;

contract MappingExample {
    mapping(address => uint256) public balances;

    function setBalance(address _account, uint256 _amount) public {
        balances[_account] = _amount;  // Set the balance for a specific address
    }

    function getBalance(address _account) public view returns (uint256) {
        return balances[_account];  // Get the balance of a specific address
    }
}

এখানে, mapping(address => uint256) এর মাধ্যমে একটি ঠিকানার সাথে সম্পর্কিত পরিমাণ অর্থ সংরক্ষণ করা হয়েছে। এটি ব্লকচেইনে একটি কী-ভ্যালু পেয়ার হিসেবে কাজ করে।


সারাংশ

Solidity তে ডেটা টাইপ এবং অ্যারে অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে, কারণ এটি স্মার্ট কন্ট্রাক্টের মধ্যে ডেটা সংরক্ষণ এবং প্রক্রিয়া করার জন্য ব্যবহৃত হয়। Solidity তে বিভিন্ন ধরনের ডেটা টাইপ যেমন uint, int, address, bool, string এবং bytes ডেটা সংগ্রহের জন্য ব্যবহৃত হয়, এবং অ্যারে বা mapping এর মাধ্যমে একাধিক মান সংরক্ষণ করা যায়। অ্যারে এবং মেপিং ব্যবহার করে, Solidity তে ডেটা স্টোরেজ এবং অ্যাক্সেসের সুবিধা নিশ্চিত করা হয়।

Content added By

Solidity তে প্রিমিটিভ ডেটা টাইপগুলি এমন ডেটা টাইপ যা সরাসরি মান সংরক্ষণ করতে ব্যবহৃত হয় এবং এগুলি স্মার্ট কন্ট্রাক্টের স্টেট বা লজিক পরিচালনা করতে সহায়ক। Solidity তে কিছু প্রিমিটিভ ডেটা টাইপ যেমন uint, int, address, এবং bool খুবই গুরুত্বপূর্ণ, কারণ এগুলোর মাধ্যমে স্মার্ট কন্ট্রাক্টের মৌলিক অপারেশন এবং লেনদেনের ডেটা সংরক্ষণ করা হয়।


1. uint (Unsigned Integer)

uint হল unsigned integer, অর্থাৎ এমন একটি পূর্ণসংখ্যা টাইপ যা শুধুমাত্র ধনাত্মক সংখ্যা (০ বা তার বেশি) ধারণ করতে পারে। এর মধ্যে ঋণাত্মক মান থাকবে না। uint এর আকার বিভিন্ন হতে পারে, যেমন uint8, uint256 ইত্যাদি, যেখানে uint256 সবচেয়ে বড় আকার, যা 256-বিট ধারণ করতে সক্ষম।

  • Sintaxis:

    uint <variable_name>;
    uint8 <variable_name>;  // 8-বিট unsigned integer
    uint256 <variable_name>;  // 256-বিট unsigned integer
  • উদাহরণ:

    uint256 public totalSupply;
    uint8 public counter;

এখানে, totalSupply একটি uint256 টাইপ ভেরিয়েবল, যা বড় সংখ্যাগুলি ধারণ করতে সক্ষম, এবং counter একটি uint8 টাইপ ভেরিয়েবল, যা 0 থেকে 255 পর্যন্ত মান ধারণ করতে পারে।


2. int (Signed Integer)

int হল signed integer, অর্থাৎ এটি ধনাত্মক এবং ঋণাত্মক উভয় মানই ধারণ করতে পারে। এর মধ্যে uint এর মতো সংখ্যাও থাকতে পারে, তবে এখানে ঋণাত্মক মানও গ্রহণ করা সম্ভব। int এর আকারও বিভিন্ন হতে পারে, যেমন int8, int256 ইত্যাদি, যেখানে int256 সর্বোচ্চ আকার।

  • Sintaxis:

    int <variable_name>;
    int8 <variable_name>;  // 8-বিট signed integer
    int256 <variable_name>;  // 256-বিট signed integer
  • উদাহরণ:

    int256 public balance;
    int8 public age;

এখানে, balance একটি int256 টাইপ ভেরিয়েবল যা ধনাত্মক এবং ঋণাত্মক মান ধারণ করতে সক্ষম, এবং age একটি int8 টাইপ ভেরিয়েবল যা -128 থেকে 127 পর্যন্ত মান ধারণ করতে পারে।


3. address

address হল একটি বিশেষ ডেটা টাইপ যা Ethereum ঠিকানাকে প্রতিনিধিত্ব করে। এটি ব্লকচেইনে কোনও অ্যাকাউন্ট বা কন্ট্রাক্টের ঠিকানা সংরক্ষণ করতে ব্যবহৃত হয়। একটি address টাইপ ভেরিয়েবল 20 বাইটের হেক্সাডেসিমাল মান ধারণ করে। এটি মূলত ব্লকচেইনে লেনদেন সম্পাদন করতে বা কন্ট্রাক্টের সাথে যোগাযোগ করতে ব্যবহৃত হয়।

  • Sintaxis:

    address <variable_name>;
  • উদাহরণ:

    address public owner;
    address public recipient;

এখানে, owner এবং recipient হল address টাইপ ভেরিয়েবল যা দুটি Ethereum ঠিকানা সংরক্ষণ করে।


4. bool (Boolean)

bool হল Boolean টাইপ, যা শুধুমাত্র দুটি মান ধারণ করতে পারে: true বা false। এটি শর্তাবলীর ফলাফল, যেমন if স্টেটমেন্টের শর্ত, ফ্ল্যাগ বা সিস্টেমের অবস্থা নির্দেশ করতে ব্যবহৃত হয়।

  • Sintaxis:

    bool <variable_name>;
  • উদাহরণ:

    bool public isActive;
    bool public isCompleted;

এখানে, isActive এবং isCompleted দুটি bool টাইপ ভেরিয়েবল যা দুটি সম্ভাব্য মান ধারণ করে: true বা false


সারাংশ

Solidity তে প্রিমিটিভ ডেটা টাইপগুলি স্মার্ট কন্ট্রাক্টের মৌলিক ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়। uint এবং int পূর্ণসংখ্যার জন্য ব্যবহৃত হয়, যেখানে uint শুধু ধনাত্মক মান ধারণ করে এবং int ধনাত্মক ও ঋণাত্মক উভয় মান ধারণ করতে সক্ষম। address বিশেষ ডেটা টাইপ যা Ethereum ঠিকানা সংরক্ষণ করতে ব্যবহৃত হয়, এবং bool শুধুমাত্র true বা false মান ধারণ করে, যা শর্তাবলী বা স্টেট ফ্ল্যাগ হিসেবে ব্যবহৃত হয়।

Content added By

Solidity তে অ্যারে একটি ডেটা স্ট্রাকচার যা একই ধরনের মান সংরক্ষণ করার জন্য ব্যবহৃত হয়। অ্যারে দুটি ধরনের হতে পারে: একমাত্রিক অ্যারে (1D Array) এবং দ্বিমাত্রিক অ্যারে (2D Array)। এই দুটি অ্যারের মাধ্যমে একাধিক মানের সংগ্রহ তৈরি করা যায় এবং তাদের ওপর বিভিন্ন অপারেশন করা যায়।


1. একমাত্রিক অ্যারে (1D Array)

একমাত্রিক অ্যারে হল এমন একটি অ্যারে যেখানে এক ধরনের মান একমাত্রিকভাবে সংরক্ষিত থাকে, অর্থাৎ একটি মাত্র সারিতে একাধিক মান রাখা হয়। এটি সবচেয়ে সাধারণ ধরনের অ্যারে, যেখানে একটি মানের লিস্ট বা সংগ্রহ তৈরি করা হয়।

গঠন:

type[] public arrayName;

এখানে, type হল ডেটা টাইপ (যেমন uint, address, string), এবং arrayName হল অ্যারের নাম।

উদাহরণ:

pragma solidity ^0.8.0;

contract MyContract {
    uint256[] public numbers;

    function addNumber(uint256 _number) public {
        numbers.push(_number); // numbers অ্যারে তে নতুন মান যুক্ত করা
    }

    function getNumber(uint256 _index) public view returns (uint256) {
        return numbers[_index]; // নির্দিষ্ট ইনডেক্স থেকে মান ফেরত নেয়া
    }

    function getLength() public view returns (uint256) {
        return numbers.length; // অ্যারের দৈর্ঘ্য
    }
}

এখানে, numbers একটি একমাত্রিক অ্যারে যা uint256 ধরনের মান ধারণ করে। addNumber ফাংশনটি নতুন সংখ্যা অ্যারে তে যোগ করে, getNumber ফাংশনটি নির্দিষ্ট ইনডেক্স থেকে মান নেয় এবং getLength ফাংশনটি অ্যারের দৈর্ঘ্য প্রদান করে।


2. দ্বিমাত্রিক অ্যারে (2D Array)

দ্বিমাত্রিক অ্যারে এমন একটি অ্যারে যেখানে একাধিক একমাত্রিক অ্যারে সংরক্ষিত থাকে। এটি একটি অ্যারে যার ভিতরে আরো অ্যারে থাকে। এটা সাধারণত মেট্রিক্স বা টেবিলের মতো ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়।

গঠন:

type[][] public arrayName;

এখানে, type হল ডেটা টাইপ (যেমন uint, address, string), এবং arrayName হল অ্যারের নাম।

উদাহরণ:

pragma solidity ^0.8.0;

contract MyContract {
    uint256[][] public matrix;

    function addRow(uint256[] memory _row) public {
        matrix.push(_row); // নতুন রো অ্যারেতে যোগ করা
    }

    function getElement(uint256 rowIndex, uint256 colIndex) public view returns (uint256) {
        return matrix[rowIndex][colIndex]; // নির্দিষ্ট রো এবং কলাম থেকে মান ফেরত নেয়া
    }

    function getRowLength(uint256 rowIndex) public view returns (uint256) {
        return matrix[rowIndex].length; // নির্দিষ্ট রোর দৈর্ঘ্য
    }
}

এখানে, matrix একটি দ্বিমাত্রিক অ্যারে যা uint256 ধরনের মান ধারণ করে। addRow ফাংশনটি একটি নতুন রো অ্যারেতে যোগ করে, getElement ফাংশনটি নির্দিষ্ট রো এবং কলাম থেকে মান নেয়, এবং getRowLength ফাংশনটি নির্দিষ্ট রোর দৈর্ঘ্য প্রদান করে।


3. একমাত্রিক ও দ্বিমাত্রিক অ্যারে এর মধ্যে পার্থক্য

  • একমাত্রিক অ্যারে (1D Array): একমাত্রিক অ্যারে একটি সোজা লিস্ট যেখানে এক ধরনের একাধিক মান রাখা হয়। এটি সহজ এবং কমপ্লেক্স নয়।
  • দ্বিমাত্রিক অ্যারে (2D Array): দ্বিমাত্রিক অ্যারে একাধিক একমাত্রিক অ্যারের একটি সারণী বা টেবিলের মতো হয়। এটি বেশি ডেটা স্টোর করতে সক্ষম এবং মেট্রিক্স বা টেবিল আকারে ডেটা সংগঠিত করতে ব্যবহৃত হয়।

সারাংশ

Solidity তে একমাত্রিক অ্যারে এবং দ্বিমাত্রিক অ্যারে দুটি প্রধান ধরনের অ্যারে ব্যবহৃত হয়। একমাত্রিক অ্যারে একটি সরল লিস্ট যা একই ধরনের মান ধারণ করে, এবং দ্বিমাত্রিক অ্যারে একাধিক একমাত্রিক অ্যারের একটি টেবিলের মতো ব্যবস্থা। অ্যারে ব্যবহার করে ডেটা সংরক্ষণ এবং সঞ্চালন করা যায়, যা স্মার্ট কন্ট্রাক্টে ডেটা পরিচালনার জন্য খুবই কার্যকরী।

Content added By

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) এর মাধ্যমে আমরা প্রতিটি ঠিকানার সাথে একটি Person struct সংযুক্ত করেছি, যাতে ব্যবহারকারীর তথ্য সংরক্ষিত থাকে।
  • addPerson ফাংশনে, ব্যবহারকারী তাদের নাম এবং বয়স যুক্ত করতে পারে এবং সেগুলি Person struct এ স্টোর করা হবে।

Mapping এবং Structs এর মধ্যে পার্থক্য

পার্থক্যMappingStructs
ডেটা স্ট্রাকচারKey-value পেয়ারকাস্টম ডেটা টাইপ, একাধিক ডেটা একত্রিত করে
ব্যবহারএকক মান অ্যাসোসিয়েট করতে ব্যবহৃত হয়একাধিক মান একত্রিত করতে ব্যবহৃত হয়
ফাংশনের মধ্যে ব্যবহারফাংশনের বাইরে স্টেট ভেরিয়েবল হিসেবে ব্যবহৃতStruct ফাংশনের মধ্যে ব্যবহার করা যায়
ডিফল্ট ভ্যালুডিফল্ট মান থাকবে যদি কোন key-এর মান না থাকেStruct এর প্রতিটি ফিল্ডে ডিফল্ট মান থাকে
অ্যাক্সেস পদ্ধতিmapping[key] দিয়ে অ্যাক্সেস করা হয়struct এর ফিল্ড অ্যাক্সেস করা হয়

সারাংশ

Mapping এবং Structs হল Solidity তে দুটি অত্যন্ত গুরুত্বপূর্ণ ডেটা স্ট্রাকচার যা স্মার্ট কন্ট্রাক্টের কার্যকারিতা বাড়াতে ব্যবহৃত হয়। Mapping ডেটার key-value পেয়ার সংরক্ষণ করতে সাহায্য করে এবং Structs বিভিন্ন ধরনের ডেটা একত্রিত করতে ব্যবহৃত হয়। Mapping সাধারণত স্টোরেজের জন্য ব্যবহার করা হয়, যেখানে Structs কাস্টম ডেটা টাইপ তৈরি করতে সহায়তা করে। এই দুটি ডেটা স্ট্রাকচার Solidity এর মধ্যে ডেটার সঠিকভাবে সংরক্ষণ এবং ব্যবস্থাপনা করার জন্য অপরিহার্য।

Content added By

Solidity তে Array হলো একটি ডেটা স্ট্রাকচার যা একই ধরনের একাধিক মান (ভ্যালু) ধারণ করতে সক্ষম। এটি একটি সোজাসুজি সংগ্রহস্থল, যেখানে আপনি একই টাইপের একাধিক উপাদান সংরক্ষণ করতে পারেন। Solidity তে দুই ধরনের Array ব্যবহৃত হয়: Fixed-size arrays এবং Dynamic arrays। প্রতিটির নিজস্ব বৈশিষ্ট্য রয়েছে এবং এগুলি বিভিন্ন পরিস্থিতিতে ব্যবহৃত হতে পারে।

1. Fixed-size Arrays

Fixed-size arrays হলো এমন ধরনের অ্যারে, যার সাইজ একটি নির্দিষ্ট মানে স্থির থাকে এবং একবার সেট করা হলে তার সাইজ পরিবর্তন করা যায় না। এই ধরনের অ্যারে কন্ট্রাক্টের কম্পাইল টাইমে নির্ধারণ করা হয়।

উদাহরণ:
pragma solidity ^0.8.0;

contract FixedArrayExample {
    uint[3] public fixedArray;  // ৩টি উপাদান ধারণ করতে সক্ষম

    constructor() {
        fixedArray[0] = 1;
        fixedArray[1] = 2;
        fixedArray[2] = 3;
    }

    function getElement(uint index) public view returns (uint) {
        return fixedArray[index];
    }
}

ব্যাখ্যা:

  • fixedArray একটি Fixed-size array, যা ৩টি uint মান ধারণ করতে পারে।
  • অ্যারের সাইজ একবার নির্ধারণ করা হলে, তা আর পরিবর্তন করা যায় না। এখানে fixedArray[3] দ্বারা এটি ৩টি উপাদান ধারণ করবে।
  • getElement ফাংশনটি অ্যারের নির্দিষ্ট ইনডেক্স থেকে মান ফেরত দেয়।
Fixed-size Arrays এর বৈশিষ্ট্য:
  • অ্যারের সাইজ কনস্ট্রাক্টরের মধ্যে অথবা ডিফাইন করার সময় নির্ধারিত হয় এবং পরে পরিবর্তন করা যায় না।
  • অ্যারের সাইজ স্থির হওয়ায় এটি কম গ্যাস খরচ করে।

2. Dynamic Arrays

Dynamic arrays হলো এমন অ্যারে, যার সাইজ চলাকালীন সময়ে পরিবর্তনযোগ্য থাকে। এর মানে হলো আপনি অ্যারের মধ্যে উপাদান যোগ বা মুছে দিতে পারেন, এবং অ্যারের সাইজ সময়ের সাথে সাথে পরিবর্তিত হতে পারে। এই ধরনের অ্যারের সাইজ পরিবর্তনশীল এবং রানটাইমে তা বাড়ানো বা কমানো যায়।

উদাহরণ:
pragma solidity ^0.8.0;

contract DynamicArrayExample {
    uint[] public dynamicArray;  // ডায়নামিক অ্যারে

    function addElement(uint _element) public {
        dynamicArray.push(_element);  // নতুন উপাদান যোগ করা
    }

    function removeElement() public {
        dynamicArray.pop();  // সর্বশেষ উপাদান মুছে ফেলা
    }

    function getElement(uint index) public view returns (uint) {
        return dynamicArray[index];
    }

    function getArrayLength() public view returns (uint) {
        return dynamicArray.length;  // অ্যারের সাইজ পাওয়া
    }
}

ব্যাখ্যা:

  • dynamicArray একটি Dynamic array, যার সাইজ বাড়ানো বা কমানো সম্ভব।
  • addElement ফাংশনটি নতুন উপাদান যোগ করতে push মেথড ব্যবহার করে।
  • removeElement ফাংশনটি অ্যারের সর্বশেষ উপাদানটি মুছে ফেলতে pop মেথড ব্যবহার করে।
  • getArrayLength ফাংশনটি অ্যারের বর্তমান সাইজ ফেরত দেয়।
Dynamic Arrays এর বৈশিষ্ট্য:
  • অ্যারের সাইজ রানটাইমে পরিবর্তন হতে পারে। এটি নতুন উপাদান যোগ বা মুছে ফেলার মাধ্যমে সম্ভব।
  • pushpop মেথড ব্যবহার করে উপাদান অ্যারে থেকে যোগ বা মুছে ফেলা যায়।
  • ডায়নামিক অ্যারের সাইজ নির্দিষ্ট করা সম্ভব নয়, এটি চলমান সময়ে পরিবর্তিত হতে পারে।

3. ফixed এবং Dynamic Arrays এর মধ্যে পার্থক্য

বিশেষত্বFixed-size ArraysDynamic Arrays
সাইজসাইজ একবার নির্ধারণ করার পর পরিবর্তন করা যায় না।সাইজ রানটাইমে পরিবর্তিত হতে পারে।
ডিক্লেয়ারেশনসাইজ নির্ধারণ করার সময়ই অ্যারে ডিক্লেয়ার করতে হয়।সাইজ এক্সপ্লিসিটভাবে নির্ধারণের প্রয়োজন নেই।
ডেটা ম্যানিপুলেশননতুন উপাদান যোগ বা মুছে ফেলা যায় না।উপাদান যোগ বা মুছে ফেলা যায়।
গ্যাস খরচকম গ্যাস খরচ হয় কারণ সাইজ স্থির।বেশি গ্যাস খরচ হয় কারণ সাইজ পরিবর্তনশীল।

সারাংশ

Solidity তে Fixed-size arrays এবং Dynamic arrays দুটি আলাদা ডেটা স্ট্রাকচার, যেখানে Fixed-size arrays এর সাইজ একবার নির্ধারণ করা হলে পরিবর্তন করা যায় না, কিন্তু Dynamic arrays এর সাইজ চলাকালীন সময়ে পরিবর্তিত হতে পারে। Fixed-size arrays সাধারণত কম গ্যাস খরচ করে এবং সহজ ব্যবহারের জন্য উপযোগী, তবে Dynamic arrays ব্যবহার করে অনেক বেশি ফ্লেক্সিবিলিটি পাওয়া যায়, যেমন উপাদান যোগ করা বা মুছে ফেলা। Solidity তে অ্যারের এই দুটি ধরনের ব্যবহারের মাধ্যমে আপনি আপনার প্রোজেক্টের প্রয়োজন অনুসারে সঠিক ডেটা স্ট্রাকচার নির্বাচন করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...