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.cnblogs.com/huahuayu/p/8604873.html