📜  Solidity-变量

📅  最后修改于: 2020-11-04 04:20:24             🧑  作者: Mango


 

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 First Application一章中提供的步骤运行上述程序。

输出

0: uint256: 10

全局变量

这些是全局工作空间中存在的特殊变量,可提供有关区块链和交易属性的信息。

Name Returns
blockhash(uint blockNumber) returns (bytes32) Hash of the given block – only works for 256 most recent, excluding current, blocks
block.coinbase (address payable) Current block miner’s address
block.difficulty (uint) Current block difficulty
block.gaslimit (uint) Current block gaslimit
block.number (uint) Current block number
block.timestamp (uint) Current block timestamp as seconds since unix epoch
gasleft() returns (uint256) Remaining gas
msg.data (bytes calldata) Complete calldata
msg.sender (address payable) Sender of the message (current caller)
msg.sig (bytes4) First four bytes of the calldata (function identifier)
msg.value (uint) Number of wei sent with the message
now (uint) Current block timestamp
tx.gasprice (uint) Gas price of the transaction
tx.origin (address payable) Sender of the transaction

实体变量名称

在Solidity中命名变量时,请牢记以下规则。

  • 您不应将任何Solidity保留关键字用作变量名。下一节将提到这些关键字。例如,break或boolean变量名称无效。
  • 实体变量名称不应以数字(0-9)开头。它们必须以字母或下划线字符开头。例如,123test是无效的变量名,而_123test是有效的变量名。
  • 实体变量名称区分大小写。例如,Name和name是两个不同的变量。