最近在学习Solidity,简单记录一下。
推荐0xAA师傅的Solidity极简入门教程
# 函数
solidity官方文档里把函数归到数值类型中,但他们之间的差别还是比较大的。
# 函数类型
在solidity中,函数的定义为:
function <function name> () {internal|external|public|private} [pure|view|payable] [returns (<return types>)]
学过C语言的都知道怎么定义一个函数,但solidity中的函数与C的稍微有些不同,它需要额外设置3个关键字。
-
internal|external|public|private(必须设置)public:最宽松的限制,合约内外都可以访问(如果用来修饰映射变量,会生成相应函数用来查询数值)。private:只能从合约内部访问,继承的子合约不能访问。external:只能从合约外部访问。internal:只能从合约内部访问,继承的子合约可以访问。
pragma solidity ^0.8.4; //SPDX-License-Identifier: SimPL-2.0 contract _function { uint _uint = 1; function _public () public { _uint = _uint - 1; } function _private () private { } function _external () external { } function _internal () internal { } } -
pure|view|payable(按需设置)payable:只有包含payable关键字的函数,才能在运行的时候给合约转入ETH。
在变量一章有提到过,以太坊的运行依赖矿工,而矿工在挖掘区块时也是要收钱的,也就是我们常说的
gas fee。因此我们希望在执行合约时,花费的gas fee越少越好,pure和view两个关键字就是用来节省gas fee的,包含它俩关键字的函数不会改变链上的状态,也就不需要花费gas fee。pure:包含pure关键字的函数,既不能读取变量也不能写入变量。view:包含view关键字的函数,只能读取变量,不能写入变量。
不包含pure或view关键字的函数,既能读取变量,也能写入变量。
-
returns (<return types>)(按需设置)