您的位置:首页 > 其它

Solidity函数中pure、view、constant的用法

2019-01-16 12:06 579 查看
1.solidity为函数提供了四种访问权限:public,internal,private,external
  • public:公共函数,内部正常访问,外部正常访问,子类可以继承
  • internal:内部函数,内部正常访问,外部无法访问,子类可以继承
  • private: 私有函数,内部正常访问,外部无法访问,子类无法继承
  • external: 外部函数,内部不能访问,外部正常访问,子类可继承
2.solidity函数的格式为:

function 函数名(参数) public|private|internal|external pure|view|constant 无返回值|returns (返回值类型)。

pragma solidity ^0.5.0;

contract math{
// int uint

uint numa = 100;
uint numb = 200;

// uint numc = 2;

// function add() view public returns(uint){
//     return numa + numb;
// }

function add(uint a, uint b) pure public returns(uint){
return a+b;
}

function sub(uint a, uint b) pure public returns(uint){
return a-b;
}

function mul(uint a, uint b) pure public returns(uint){
return a*b;
}

function div(uint a, uint b) pure public returns(uint){
return a/b;
}

function mod(uint a, uint b) pure public returns(uint){
return a%b;
}

function squ(uint a,uint b) pure public returns(uint){
return a**b;
}

uint8 a = 3;
uint8 b = 4;

function weiyu() view public returns(uint){
return a&b;
}

function weihuo() view public returns(uint){
return a|b;
}

function weifan() view public returns(uint){
return ~a;
}

function weiyihuo() view public returns(uint){
return a^b;
}

function zuoyi() view public returns(uint){
return a<<1;
}

function youyi() view public returns(uint){
return a>>1;
}
}
  • 当函数有返回值,函数中正常来讲需要有

    pure
    |
    view
    |
    constant
    关键字 如果没有返回值,在调用函数过程中,需要主动去调用底层的
    call()
    方法。当函数返回值为全局变量或属性时,可以使用
    view
    或者
    constant
    view
    可以理解成
    constant
    的新版本,可以简单理解成他们俩等价
    pure
    。如果只是纯粹的返回一个值,直接使用
    pure
    反之,使用
    view
    或者
    constant
    即可。

  • 在Solidity中constant、view、pure三个函数修饰词的作用是告诉编译器,函数不改变/不读取状态变量,这样函数执行就可以不消耗gas了(是完全不消耗!),因为不需要矿工来验证,所以用好这几个关键词很重要!

  • 这三个关键词有什么区别和联系,简单来说,在Solidity v4.17之前,只有constant,后来有人嫌constant这个词本身代表变量中的常量,不适合用来修饰函数,所以将constant拆成了view和pure。view的作用和constant一模一样,可以读取状态变量但是不能改;pure则更为严格,pure修饰的函数不能改也不能读状态变量,否则编译通不过。

参考:
[1] http://shaolinbit.com/2018/02/06/blockchain-solidity-qx/
[2] https://www.geek-share.com/detail/2732465360.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: