📜  Solidity – 视图和纯函数

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

Solidity – 视图和纯函数

视图函数是只读函数,保证调用后不能修改状态变量。如果修改状态变量、发出事件、创建其他合约、使用selfdestruct方法、通过调用传输以太币、调用非“视图或纯”函数、使用低级调用等的语句存在于视图函数中,则在这种情况下,编译器会抛出警告。默认情况下,get 方法是 view 函数。

示例:在下面的示例中,合约 Test定义了一个视图函数来计算两个无符号整数的乘积和总和。

Solidity
// Solidity program to 
// demonstrate view
// functions
pragma solidity ^0.5.0;
  
// Defining a contract
contract Test {
      
    // Declaring state 
    // variables
    uint num1 = 2; 
    uint num2 = 4;
  
   // Defining view function to  
   // calculate product and sum 
   // of 2 numbers
   function getResult(
   ) public view returns(
     uint product, uint sum){
       uint num1 = 10;
       uint num2 = 16;
      product = num1 * num2;
      sum = num1 + num2; 
   }
}


Solidity
// Solidity program to  
// demonstrate pure functions
pragma solidity ^0.5.0;
  
// Defining a contract
contract Test {
  
    // Defining pure function to 
    // calculate product and sum
   // of 2 numbers
   function getResult(
   ) public pure returns(
     uint product, uint sum){
      uint num1 = 2; 
      uint num2 = 4;
      product = num1 * num2;
      sum = num1 + num2; 
   }
}


输出 :

查看功能

纯函数不读取或修改状态变量,它仅使用传递给函数的参数或其中存在的局部变量返回值。如果读取状态变量、访问地址或余额、访问任何全局变量块或 msg、调用非纯函数等的语句存在于纯函数中,则编译器在这种情况下会抛出警告。

示例:在下面的示例中,合约 Test定义了一个纯函数来计算两个数字的乘积和总和。

坚固性

// Solidity program to  
// demonstrate pure functions
pragma solidity ^0.5.0;
  
// Defining a contract
contract Test {
  
    // Defining pure function to 
    // calculate product and sum
   // of 2 numbers
   function getResult(
   ) public pure returns(
     uint product, uint sum){
      uint num1 = 2; 
      uint num2 = 4;
      product = num1 * num2;
      sum = num1 + num2; 
   }
}

输出 :

纯函数