Solidity 教程系列第11篇 - Solidity 视图函数、虚函数讲解。 Solidity 系列完整的文章列表请查看分类-Solidity。
Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么
一个函数如果它不修改状态变量,应该声明为view函数,不过下面几种情况认为是修改了状态:
看一个例子:
pragma solidity ^0.4.16;
contract C {
uint public data = 0;
function f(uint a, uint b) public view returns (uint) {
return a * (b + 42) + now;
}
// 错误做法,虽然可以编译通过
function df(uint a) public view {
data = a;
}
}
有几个地方需要注意一下:
当前编译器并未强制要求声明为view,但建议大家对于不会修改状态的函数的标记为view。
函数可以声明为view,表示它即不读取状态,也不修改状态,除了上一节介绍的几种修改状态的情况,以下几种情况被认为是读取了状态:
看一个例子:
pragma solidity ^0.4.16;
contract C {
function f(uint a, uint b) public pure returns (uint) {
return a * (b + 42);
}
}
尽管view 和 pure 修饰符编译器并未强制要求使用,view 和 pure 修饰也不会带来gas 消耗的改变,但是更好的编码习惯让我们跟容易发现智能合约中的错误。