سالیدیفا

تابع (Function)

روش های مختلفی برای برگرداندن خروجی از یک تابع وجود دارد.

توابع عمومی (Public functions) نمیتوانند بعضی از انواع داده را به عنوان ورودی و خروجی قبول کنند.

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

contract Function {
    // توابع امکان برگردادن چندین خروجی را دارند
    function returnMany() public pure returns (uint, bool, uint) {
        return (1, true, 2);
    }

    // مقادیر برگشتی میتوانند نام گذاری شوند
    function named() public pure returns (uint x, bool b, uint y) {
        return (1, true, 2);
    }

    // مقادیر بازگشتی را میتوان به نام آنها انتصاب کرد.
    // را حذف کرد returnدر این حالت میتوان دستور .
    function assigned() public pure returns (uint x, bool b, uint y) {
        x = 1;
        b = true;
        y = 2;
    }

    // Use destructuring assignment when calling another
    // function that returns multiple values.
    function destructuringAssignments()
        public
        pure
        returns (uint, bool, uint, uint, uint)
    {
        (uint i, bool b, uint j) = returnMany();

        // مقادیر را می شود 
        (uint x, , uint y) = (4, 5, 6);

        return (i, b, j, x, y);
    }

    // نمیتوان از نگاشت(مپینگ) برای ورودی و خروجی استفاده کرد.

    // میتوان از آرایه ها به عنوان ورودی استفاده کرد
    function arrayInput(uint[] memory _arr) public {}

    // میتوان خروجی را به صورت آرایه فرستاد
    uint[] public arr;

    function arrayOutput() public view returns (uint[] memory) {
        return arr;
    }
}

// صدا زدن توابع با 
contract XYZ {
    function someFuncWithManyInputs(
        uint x,
        uint y,
        uint z,
        address a,
        bool b,
        string memory c
    ) public pure returns (uint) {}

    function callFunc() external pure returns (uint) {
        return someFuncWithManyInputs(1, 2, 3, address(0), true, "c");
    }

    function callFuncWithKeyValue() external pure returns (uint) {
        return
            someFuncWithManyInputs({a: address(0), b: true, c: "c", x: 1, y: 2, z: 3});
    }
}
Solidity

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