Gas 优化大师课编译器优化始终使用命名返回

始终使用命名返回

分析

在 Solidity 中定义函数时,可以为返回变量命名。这可以增强可读性并减少代码冗余。如果函数具有命名的返回变量并且还包含显式return语句,则可能导致冗余和额外的 gas 成本。

// SPDX-License-Identifier: MIT
pragma solidity 0.8.22;
contract NameReturns1 {
    function calls(uint256 *x*, uint256 *y*) external pure returns (uint256 *z*) {
       require(x > 0);
       require(y > 0);

        z = x * y;
    }
}

contract NameReturns2 {
    function calls(uint256 *x*, uint256 *y*) external pure returns (uint256 *z*) {
        require(x > 0);
        require(y > 0);
        z = x * y;
        return z;
    }
}

contract Returns {
    function calls(uint256 *x*, uint256 *y*) external pure returns (uint256) {
        require(x > 0);
        require(y > 0);
        return x * y;
    }
}

测试

文件位置:

src/compiler/NameReturn.sol
test/compiler/NameReturn.sol

测试结果:

forge test --gas-report --mt test_return_ -vvv --optimize

始终使用命名返回图示

总结

对应源码

本文配套代码固定到提交 8960383;Gas 数据会随编译器、优化器参数和 EVM 版本变化。