Solidity函数是什么?

  • Alchemy
  • 发布于 2022-11-17 12:24
  • 阅读 18

本文详细介绍了Solidity中的函数类型,包括视图函数、纯函数、特殊函数和回退函数,以及函数的可见性属性。

Solidity 中有多种类型的函数,包括 view 函数、pure 函数、特殊函数和 fallback 函数。函数还可以通过函数可见性属性修饰为 public、external、internal 和 private。本文将介绍 Solidity 函数的类型、语法、如何阅读函数和可见性。

什么是 Solidity 函数?

Solidity 函数是完成特定任务的自包含代码模块。 与其他 web3 编程语言 一样,Solidity 允许开发者通过使用函数编写模块化代码,以消除重新编写相同代码片段的冗余。相反,开发者可以在程序中必要时调用该函数。

如何编写和阅读 Solidity 函数

要编写 Solidity 函数,开发者需要根据其正确的语法进行结构化,并确保写出其基本组件以确保函数能够正确执行。

Solidity 函数语法

使用以下语法创建你的 Solidity 函数,如下例所示:

  1. 使用 function 关键字定义函数

  2. 创建一个唯一的函数名称,且不与任何保留关键字冲突

  3. 列出包含参数名称和数据类型的参数,或者不包含任何额外参数

  4. 创建一个用大括号包围的语句块

function function-name(parameter-list) scope returns() {
// statements
}

注意:Solidity 事件 的声明方式类似于函数。事件和函数都是高层 dApp 工作中不可或缺的部分。

下图显示了 Solidity 函数的三个主要组件:

  1. 函数名称

  2. 函数类型

  3. 返回类型

Solidity 中函数的示例Solidity 中函数的示例

Solidity 函数的不同类型有哪些?

我们将在本节中介绍多种类型的 Solidity 函数,包括 view 函数、pure 函数、特殊函数和 fallback 函数。

1. View 函数

在 Solidity 中,view 函数为只读,并且不能更改在智能合约中定义的状态变量。view 函数的语法如下:

function <function-name>() <access-modifier> view returns() {
// function body
}

2. Pure 函数

纯函数声明将在不改变或读取状态变量的情况下进行操作。通常,pure 函数用于一些常见的实用程序或计算。pure 函数的语法如下:

function <function-name>() <access-modifier> pure returns() {
// function body
}

3. 特殊函数

Solidity 有几个特殊函数,可以在开发智能合约时使用。Getter 和 receive 函数是智能合约中重要的 payable functions

Getter 函数

定义为 public 的状态变量有一个由编译器自动创建的 getter 函数。该函数与变量同名,并具有外部可见性。

接收 Ether 函数

一个合约最多可以有一个接收函数。接收函数不能有参数,无法返回,并且必须具有外部可见性和可支付的状态可变性。

当调用合约并发送 Ether 而不指定任何函数时,将执行接收函数。此函数的声明如下:

receive() external payable {
...
}

4. Fallback 函数

在 Solidity 中,fallback 函数是一个没有名称、参数或返回值的外部函数。当函数标识符与智能合约中的任何可用函数不匹配时,或者如果在函数调用时没有提供数据,将执行 fallback 函数。

什么是函数重载?

函数重载发生在同一作用域中具有多个相同函数名称的定义时。函数的定义必须在参数列表中通过参数的类型和/或数量有所不同。你不能仅通过返回类型来重载函数声明。

Vyper 如何与 Solidity 不同地处理函数重载?

与 Solidity 不同,Vyper,作为一种 基于 Solidity 的 Python 风格语言,不允许函数重载。在 Vyper 中尝试函数重载将导致“重复的函数或事件名称”错误。

什么是函数可见性?

指定函数可见性使我们能够 控制哪些实体可以调用智能合约中的函数。调用者包括三种类型:

  1. 主合约

  2. 从主合约派生(例如,继承)的合约

  3. 第三方

函数可见性帮助你控制上述哪些调用者可以执行函数。函数可见性有四种类型:

  1. Public

  2. External

  3. Internal

  4. Private

从 External 到 Private,函数的可访问性逐渐降低:public 函数是最可访问的,private 函数是最不易访问的。

External 与 Public

External 和 public 是可以从定义它们的合约外部调用的两种函数可见性。External 意味着该函数只能由其他合约或外部拥有帐户(EOA)调用。Public 意味着该函数可以从外部调用,也可以从合约内部调用。

Internal 与 Private

与 external 和 public 相对,internal 和 private 都不允许外部方访问该函数。对于 private 函数,仅该合约中的函数可以调用它。对于 internal 函数,该合约中的函数或派生合约中的函数可以调用它。

继续学习 Solidity 函数

本文介绍了 Solidity 中的函数。要继续学习,请注册 Alchemy 大学的以太坊开发者训练营,以获得免费的 7 周非同步 Solidity 快速课程。如果开发者是新手,Alchemy 大学的 3 周 JavaScript 快速课程 是开始以太坊训练营之前的绝佳前提。

  • 原文链接: alchemy.com/overviews/so...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Alchemy
Alchemy
江湖只有他的大名,没有他的介绍。