solidity基础-函数

定义

function 关键字声明,是合约中的可执行单元,一个函数的完整定义如下

function (funcName) (<parameter types) {public | external | internal | private} [constant | view payable] [returns (<return types>)] {
        // do something
    }

调用

  • internal:内部调用
  • external:外部调用,使用 合约实例.函数名方式调用

构造函数

使用构造函数关键字(constructor)定义,没有函数名。构造函数是一个可选函数,用于初始化合约的状态变量。构造函数可以是内部的或公共的,内部构造函数将合约标记为抽象的

constructor() <访问修饰符> {
    // do something
}

函数可见性visibility

solidity为函数提供了四种可见性:external、public、internal、private

external

  • 声明为 external 的函数可以从其他合约来进行调用,所以声明为 external 是合约对外接口的一部分
  • 不能以 internal 的方式进行调用
  • 有时在接收大的数据数组时性能更好

public

  • 函数默认声明为 public
  • public 的函数既允许以 internal 的方式调用,也允许以 external 的方式调用
  • public 的函数由于允许被外部合约访问,是合约对外接口的一部分
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

contract Demo {

    function funcA() public pure returns (string memory) {
        return "function A";
    }

    function funcB() public view {
        // 以 internal 的方式调用函数
        funcA();
        // 以 external 的方式调用函数
        this.funcA();
    }

}

internal

  • 在当前合约或继承的合约中,只允许以 internal 的方式调用

private

  • 只能在当前合约中内访问

函数的状态可变性mutability

  • view:用 view 声明的函数只能读取状态不能修改状态
  • pure:用 pure 声明的函数既不能读取状态也不能修改状态
  • payable:用 payable 声明的函数可以接受发送给合约的以太币,如果未指定,该函数将自动拒绝所有发送给它的以太币

函数的返回值 returns / return

方式一:returns + return

  • returns 加在函数名后面,用于声明返回的变量类型和变量名
  • return 用于函数主体中,返回指定的变量
function funcA() public pure returns (string memory) {
        return "function A";
    }

方式二:命名方式返回

我们可以在 returns 中标明返回变量的名称,这样 solidity 会自动给这些变量初始化,并且自动返回这些变量的值,不需要再加 return

function funcA() public pure returns (string memory res) {
    res = "function A";
}

函数的重载

solidity 中允许函数进行重载,即名字相同但输入参数不同的函数可以同时存在,他们被视为不同函数。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

contract Demo {

    function func(uint8 a) external pure returns (uint8) {
        return a;
    }

    function func(bytes memory a) external pure returns (bytes memory) {
        return a;
    }

}

本文链接:

https://www.55geek.cn/index.php/archives/130/
1 + 9 =
快来做第一个评论的人吧~