天天看點

034.Solidity入門——21不可變量

Solidity 中的不可變量是在編譯時就被确定的常量,也稱為常量變量(constant variable)或隻讀變量(read-only variable)。這些變量在定義時必須立即初始化,并且在整個合約中都無法被修改,可以在函數内部使用,但是無法更改它們的值。

不可變量通常用于存儲不需要更改的資料,例如合約位址或具有公認不變性的數值。由于這些變量在編譯時就已經被确定了值,是以它們不需要在運作時被計算,進而可以幫助減少合約的 gas 費用。

示例代碼:

pragma solidity ^0.8.0;

contract ImmutableExample {
    // 定義一個不可變位址變量
    address public immutable myAddress;
    // 定義一個不可變數值變量
    uint256 public immutable myNumber;

    constructor(address _addr, uint256 _number) {
        // 初始化不可變變量
        myAddress = _addr;
        myNumber = _number;
    }

    // 函數使用不可變變量
    function getAddress() public view returns (address) {
        return myAddress;
    }

    // 函數使用不可變變量,并且更新狀态變量
    function updateNumber(uint256 _newNumber) public {
        // 下面的代碼會導緻編譯錯誤,因為 myNumber 是不可變變量,無法被更改
        // myNumber = _newNumber;
    }
}
           

注:兩個不可變變量 myAddress 和 myNumber在合約部署時被初始化,并且在整個合約生命周期内都無法被更改。

不可變變量在編譯時就已經确定了值,是以通路它們的時候不需要消耗 gas,而更新不可變變量會導緻編譯錯誤。是以,使用不可變變量可以幫助減少合約的 gas 費用。

繼續閱讀