📜  Solidity – 变量

📅  最后修改于: 2022-05-13 01:55:29.447000             🧑  作者: Mango

Solidity – 变量

变量基本上是可以在运行时操作的数据的占位符。变量允许用户检索和更改存储的信息。

变量命名规则

1. 变量名不能与保留关键字匹配。

2. 变量名称必须以字母或下划线 (_) 开头,可以包含“a 到 z”或“A 到 Z”的字母或“0 到 9”的数字以及字符。

例子:

Geeks123, geeks, _123geeks are valid variable names 
123geeks, $Geeks, 12_geeks are invalid variable names

3.变量名区分大小写即

例子:

Geeks123 and geeks123 are different variables

变量声明

在 Solidity 中声明变量有点不同,要声明一个变量,用户必须先指定数据类型,然后是访问修饰符。

句法:

   ; 

例子:

int public int_var; 

变量类型

Solidity 是一种静态类型语言,即每个声明的变量总是有一个基于其数据类型的默认值,这意味着没有“null”或“undefined”的概念。 Solidity 支持三种类型的变量:

1. 状态变量:这些变量的值被永久存储在合约存储中。每个函数都有自己的范围,状态变量应该始终在该范围之外定义。

示例:在下面的示例中。合约 Solidity_var_Test使用构造函数初始化无符号整数状态变量的值。

Solidity
// Solidity program to 
// demonstrate state 
// variables
pragma solidity ^0.5.0;
  
// Creating a contract
contract Solidity_var_Test {
     
   // Declaring a state variable
   uint8 public state_var;      
  
   // Defining a constructor
   constructor() public {
      state_var = 16;   
   }
}


Solidity
// Solidity program to demonstrate
// local variables
pragma solidity ^0.5.0;
  
// Creating a contract
contract Solidity_var_Test {
  
   // Defining function to show the declaration and
   // scope of local variables
   function getResult() public view returns(uint){
       
      // Initializing local variables
      uint local_var1 = 1; 
      uint local_var2 = 2;
      uint result = local_var1 + local_var2;
       
      // Access the local variable
      return result; 
   }
}


Solidity
// Solidity program to 
// show Global variables
pragma solidity ^0.5.0;
  
// Creating a contract
contract Test { 
    
  // Defining a variable
  address public admin;
    
  // Creating a constructor to
  // use Global variable
  constructor() public {    
    admin = msg.sender;  
  }
 }


输出 :

状态变量输出

2.局部变量:这些变量的值在函数执行之前一直存在,并且不能在该函数之外访问。这种类型的变量通常用于存储临时值。

示例:在下面的示例中,合约 Solidity_var_Test定义了一个函数来声明和初始化局部变量并返回两个局部变量的和。

坚固性

// Solidity program to demonstrate
// local variables
pragma solidity ^0.5.0;
  
// Creating a contract
contract Solidity_var_Test {
  
   // Defining function to show the declaration and
   // scope of local variables
   function getResult() public view returns(uint){
       
      // Initializing local variables
      uint local_var1 = 1; 
      uint local_var2 = 2;
      uint result = local_var1 + local_var2;
       
      // Access the local variable
      return result; 
   }
}

输出 :

局部变量输出

3. 全局变量:这些是一些可以全局使用的特殊变量,提供有关交易和区块链属性的信息。下面列出了一些全局变量:

VariableReturn value
blockhash(uint blockNumber) returns (bytes32)Hash of a given block, works for only 256 most recent transactions excluding current blocks
block.coinbase (address payable)Address of current blocks miner
block.difficulty (uint)The difficulty of the current block
block.gaslimit (uint)Gaslimit of the current block
block.number (uint)Block number of the current block
block.timestamp (uint)The timestamp of the current block as seconds since Unix epoch
gasleft() returns (uint256)Amount of gas left
msg.data (bytes calldata)Complete call data of block
msg.sender (address payable)The sender of message i.e. current caller
msg.sig (bytes4)First four bytes of call data i.e. function identifier
msg.value (uint)Amount of Wei sent with a message
now (uint)The timestamp of the current block
gasleft() returns (uint256)Amount of gas left
tx.gasprice (uint)Price of gas for the transaction
tx.origin (address payable)Transaction sender

示例:在下面的示例中,联系人 Test使用msg.sender变量来访问部署合约的人员的地址。

坚固性

// Solidity program to 
// show Global variables
pragma solidity ^0.5.0;
  
// Creating a contract
contract Test { 
    
  // Defining a variable
  address public admin;
    
  // Creating a constructor to
  // use Global variable
  constructor() public {    
    admin = msg.sender;  
  }
 }

输出:

全局变量