سالیدیفا

مکان های داده: Storage ،Memory و Calldata

متغیر ها به یکی از صورت های storage ،memory یا calldata تعریف می شوند تا به صراحت مکان نگه داریشان(Data Location) مشخص شود.

storage – متغیر از نوع متغیر های وضعیت (state variable) است. (در بلاکچین ذخیره می شوند)
memory – متغیر در حافظه قرار دارد و تا زمانی که تابع خوانده شده وجود خواهد داشت.
calldata – مکانی خاص که شامل آرگومان های توابع است.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

contract DataLocations {
    uint[] public arr;
    mapping(uint => address) map;
    struct MyStruct {
        uint foo;
    }
    mapping(uint => MyStruct) myStructs;

    function f() public {
        //با متغیر های وضعیت _fصدا زدن
        _f(arr, map, myStructs[1]);

        // دریافت ساختار از نگاشت
        MyStruct storage myStruct = myStructs[1];
        // ساخت یک ساختار در مموری
        MyStruct memory myMemStruct = MyStruct(0);
    }

    function _f(
        uint[] storage _arr,
        mapping(uint => address) storage _map,
        MyStruct storage _myStruct
    ) internal {
        //انجام می شودmemoryکارهایی که با متغیرهای 
    }

    // امکان مقدار برگشتی از نوع مموری نیز وجود دارد
    function g(uint[] memory _arr) public returns (uint[] memory) {
        // انجام می شود memory کارهایی که با آرایه 
    }

    function h(uint[] calldata _arr) external {
        // انجام می شود calldata کارهایی که با آرایه
        }
}
Solidity

در Remix امتحان کنید: #

احساست در مورد این مقاله چیه؟