Solidity 教程系列第11篇 - Solidity 视图函数、虚函数讲解。 Solidity 系列完整的文章列表请查看分类-Solidity。
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。
函数可以声明为pure,表示它即不读取状态,也不修改状态,除了上一节介绍的几种修改状态的情况,以下几种情况被认为是读取了状态:
看一个例子:
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 消耗的改变,但是更好的编码习惯让我们跟容易发现智能合约中的错误。
强烈安利一门课程给大家:深入详解以太坊智能合约语言Solidity
学习中如遇问题,欢迎到区块链技术问答提问,这里有专家为你解惑。 登链社区 - 高质量的区块链技术博客+问答社区,为区块链学习双重助力
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!