Solidity 教程系列11 - 视图函数、纯函数讲解

Solidity 教程系列第11篇 - Solidity 视图函数、纯函数讲解。
Solidity 系列完整的文章列表请查看大纲

写在前面

Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解,
如果你还不了解,建议你先看以太坊是什么

视图函数(View Functions)

一个函数如果它不修改状态变量,应该声明为view函数,不过下面几种情况认为是修改了状态:

  1. 写状态变量
  2. 触发事件(events)
  3. 创建其他的合约
  4. call调用附加了以太币
  5. 调用了任何没有viewpure修饰的函数
  6. 使用了低级别的调用(low-level calls)
  7. 使用了包含特定操作符的内联汇编

看一个例子:

```js
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;
top Created with Sketch.