Solidity中函数修饰符,状态、全局变量,常量
函数修饰符
定义一个函数例如:
function add(uint x,uint y) external pure returns (uint){
return x+y;
}
其中“external”指该函数为外部读取函数,在合约外访问时用“external”,合约内部调用该函数是需要用“this.函数名”
如果需要读取链上的数据来使用,则
external view
如果将“view”改成“pure”则表示该函数不读取也不修改任何链上数据,只有局部变量或者空
状态变量
在函数外定义,可以在函数内修改。
uint public i; bool public b; address public myAddress; function foo() external { uint x=123; bool f=false; //部署后点以下foo三个值都发生改变只变一次 x += 456; f = true; i=123; b=true; myAddress = address(1); }
其中“i、b、myadress”是状态变量。
全局变量
不需要定义声明,可直接调用,下列代码中的“msg.sender”、“block.timestamp”、“block.number”。
function foo() external view returns (address,uint256,uint256){ address sender = msg.sender; //调用该函数的地址是什么,是谁调用的“msg.sender” uint times = block.timestamp; //“block.timestamp”指的是区块的时间戳 uint blockNum = block.number; //“block.number”指的是当前的区块编号 return (sender,times,blockNum); }
确保在函数命名时的返回值类型与函数内的返回值相对应。
局部变量
定义在函数里,随着使用结束而失效
function bar() external pure returns(uint){
uint xx = 1;
uint yy = 3;
uint zz = xx + yy;
return(zz);
}
常量
一句话:
//如果将“uint256 public x;”该成“uint256 public constant x;”即实现状态变量变为常量,读取两者消耗的“gas”值不同