Solidity - 變數



Solidity 支援三種類型的變數。

  • 狀態變數 (State Variables) − 值永久儲存在合約儲存中的變數。

  • 區域性變數 (Local Variables) − 值僅在函式執行期間存在的變數。

  • 全域性變數 (Global Variables) − 存在於全域性名稱空間中,用於獲取有關區塊鏈資訊的特殊變數。

Solidity 是一種靜態型別語言,這意味著在宣告期間需要指定狀態變數或區域性變數的型別。每個宣告的變數都根據其型別具有預設值。沒有“未定義”或“空”的概念。

狀態變數

值永久儲存在合約儲存中的變數。

pragma solidity ^0.5.0;
contract SolidityTest {
   uint storedData;      // State variable
   constructor() public {
      storedData = 10;   // Using State variable
   }
}

區域性變數

值僅在其定義的函式內可用的變數。函式引數始終是該函式的區域性變數。

pragma solidity ^0.5.0;
contract SolidityTest {
   uint storedData; // State variable
   constructor() public {
      storedData = 10;   
   }
   function getResult() public view returns(uint){
      uint a = 1; // local variable
      uint b = 2;
      uint result = a + b;
      return result; //access the local variable
   }
}

示例

pragma solidity ^0.5.0;
contract SolidityTest {
   uint storedData; // State variable
   constructor() public {
      storedData = 10;   
   }
   function getResult() public view returns(uint){
      uint a = 1; // local variable
      uint b = 2;
      uint result = a + b;
      return storedData; //access the state variable
   }
}

使用Solidity 第一個應用章節中提供的步驟執行上述程式。

輸出

0: uint256: 10

全域性變數

這些是存在於全域性工作區中的特殊變數,它們提供有關區塊鏈和交易屬性的資訊。

名稱 返回值
blockhash(uint blockNumber) returns (bytes32) 給定區塊的雜湊值 - 僅適用於最近的 256 個區塊(不包括當前區塊)
block.coinbase (address payable) 當前區塊礦工的地址
block.difficulty (uint) 當前區塊難度
block.gaslimit (uint) 當前區塊 gas 限制
block.number (uint) 當前區塊編號
block.timestamp (uint) 自 Unix 紀元以來的當前區塊時間戳(以秒為單位)
gasleft() returns (uint256) 剩餘 gas
msg.data (bytes calldata) 完整的 calldata
msg.sender (address payable) 訊息傳送者(當前呼叫者)
msg.sig (bytes4) calldata 的前四個位元組(函式識別符號)
msg.value (uint) 隨訊息傳送的 wei 數
now (uint) 當前區塊時間戳
tx.gasprice (uint) 交易的 gas 價格
tx.origin (address payable) 交易傳送者

Solidity 變數命名

在 Solidity 中命名變數時,請記住以下規則。

  • 您不應使用任何 Solidity 保留關鍵字作為變數名。這些關鍵字將在下一節中提及。例如,break 或 boolean 變數名無效。

  • Solidity 變數名不能以數字 (0-9) 開頭。它們必須以字母或下劃線開頭。例如,123test 是無效的變數名,但 _123test 是有效的變數名。

  • Solidity 變數名稱區分大小寫。例如,Name 和 name 是兩個不同的變數。

廣告
© . All rights reserved.