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;
}
}
输出 :