本文详细介绍了Solidity中的函数类型,包括视图函数、纯函数、特殊函数和回退函数,以及函数的可见性属性。
Solidity 中有多种类型的函数,包括 view 函数、pure 函数、特殊函数和 fallback 函数。函数还可以通过函数可见性属性修饰为 public、external、internal 和 private。本文将介绍 Solidity 函数的类型、语法、如何阅读函数和可见性。
Solidity 函数是完成特定任务的自包含代码模块。 与其他 web3 编程语言 一样,Solidity 允许开发者通过使用函数编写模块化代码,以消除重新编写相同代码片段的冗余。相反,开发者可以在程序中必要时调用该函数。
要编写 Solidity 函数,开发者需要根据其正确的语法进行结构化,并确保写出其基本组件以确保函数能够正确执行。
使用以下语法创建你的 Solidity 函数,如下例所示:
使用 function 关键字定义函数
创建一个唯一的函数名称,且不与任何保留关键字冲突
列出包含参数名称和数据类型的参数,或者不包含任何额外参数
创建一个用大括号包围的语句块
function function-name(parameter-list) scope returns() {
// statements
}
注意:Solidity 事件 的声明方式类似于函数。事件和函数都是高层 dApp 工作中不可或缺的部分。
下图显示了 Solidity 函数的三个主要组件:
函数名称
函数类型
返回类型
Solidity 中函数的示例
我们将在本节中介绍多种类型的 Solidity 函数,包括 view 函数、pure 函数、特殊函数和 fallback 函数。
在 Solidity 中,view 函数为只读,并且不能更改在智能合约中定义的状态变量。view 函数的语法如下:
function <function-name>() <access-modifier> view returns() {
// function body
}
纯函数声明将在不改变或读取状态变量的情况下进行操作。通常,pure 函数用于一些常见的实用程序或计算。pure 函数的语法如下:
function <function-name>() <access-modifier> pure returns() {
// function body
}
Solidity 有几个特殊函数,可以在开发智能合约时使用。Getter 和 receive 函数是智能合约中重要的 payable functions。
定义为 public 的状态变量有一个由编译器自动创建的 getter 函数。该函数与变量同名,并具有外部可见性。
一个合约最多可以有一个接收函数。接收函数不能有参数,无法返回,并且必须具有外部可见性和可支付的状态可变性。
当调用合约并发送 Ether 而不指定任何函数时,将执行接收函数。此函数的声明如下:
receive() external payable {
...
}
在 Solidity 中,fallback 函数是一个没有名称、参数或返回值的外部函数。当函数标识符与智能合约中的任何可用函数不匹配时,或者如果在函数调用时没有提供数据,将执行 fallback 函数。
函数重载发生在同一作用域中具有多个相同函数名称的定义时。函数的定义必须在参数列表中通过参数的类型和/或数量有所不同。你不能仅通过返回类型来重载函数声明。
与 Solidity 不同,Vyper,作为一种 基于 Solidity 的 Python 风格语言,不允许函数重载。在 Vyper 中尝试函数重载将导致“重复的函数或事件名称”错误。
指定函数可见性使我们能够 控制哪些实体可以调用智能合约中的函数。调用者包括三种类型:
主合约
从主合约派生(例如,继承)的合约
第三方
函数可见性帮助你控制上述哪些调用者可以执行函数。函数可见性有四种类型:
Public
External
Internal
Private
从 External 到 Private,函数的可访问性逐渐降低:public 函数是最可访问的,private 函数是最不易访问的。
External 和 public 是可以从定义它们的合约外部调用的两种函数可见性。External 意味着该函数只能由其他合约或外部拥有帐户(EOA)调用。Public 意味着该函数可以从外部调用,也可以从合约内部调用。
与 external 和 public 相对,internal 和 private 都不允许外部方访问该函数。对于 private 函数,仅该合约中的函数可以调用它。对于 internal 函数,该合约中的函数或派生合约中的函数可以调用它。
本文介绍了 Solidity 中的函数。要继续学习,请注册 Alchemy 大学的以太坊开发者训练营,以获得免费的 7 周非同步 Solidity 快速课程。如果开发者是新手,Alchemy 大学的 3 周 JavaScript 快速课程 是开始以太坊训练营之前的绝佳前提。
- 原文链接: alchemy.com/overviews/so...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!