浅谈Solidity: 3. 函数类型
solidity中函数的形式: function <function name> (<parameter types>) {internal|external|public|private} [pure|view|payable] [returns (<return types>)]
1,function:声明函数时的固定用法,想写函数,就要以function关键字开头。
2,<function name>:函数名。
3,(<parameter types>):圆括号里写函数的参数,也就是要输入到函数的变量类型和名字。
4,{internal|external|public|private}:函数可见性说明符,一共4种。没标明函数类型的,默认internal。
public: 内部外部均可见。(也可用于修饰状态变量,public变量会自动生成 getter函数,用于查询数值)。private: 只能从本合约内部访问,继承的合约也不能用(也可用于修饰状态变量)。external: 只能从合约外部访问(但是可以用this.f()来调用,f是函数名)。internal: 只能从合约内部访问,继承的合约可以用(也可用于修饰状态变量)。
5,[pure|view|payable]:决定函数权限/功能的关键字。payable(可支付的)带着它的函数,运行的时候可以给合约转入ETH。包含pure跟view关键字的函数是不改写链上状态的,因此用户直接调用他们是不需要付gas的(合约中非pure/view函数调用它们则会改写链上状态,需要付gas)。 pure:不能读取也不能写入存储在链上的状态变量。view:能读取但也不能写入状态变量。
6,[returns ()]:函数返回的变量类型和名称。
在以太坊中,以下语句被视为修改链上状态:
1,写入状态变量。
2,释放事件。
3,创建其他合同。
4,使用selfdestruct.
5,通过调用发送以太币。
6,调用任何未标记view或pure的函数。
7,使用低级调用(low-level calls)。
8,使用包含某些操作码的内联汇编。
我是温驭臣,一个Solidity的开发学习者,以上是我的简单总结,如果有缺陷,希望在评论区看到您的补充。