Solidity - View 和 Pure 函数

2025 年 5 月 27 日 | 4 分钟阅读

View 函数

Solidity 的 view 函数用于从区块链中提取信息并返回,而不会更改合约的状态。 使用这些函数可以只读访问合约的状态变量。 通过将其指定为 "view",您可以确保函数不会更改合约的状态或它访问的任何变量。

由于 view 函数是只读的,因此可以确保状态变量在被调用后无法更改。 如果 view 函数中有更改状态变量、发出事件、创建新合约、使用 selfdestruct 方法、通过调用传输以太币、调用不是 "view 或 pure" 的函数、使用低级调用等语句,编译器将引发错误。 get 方法的默认值是 view 函数。

示例:为了计算两个无符号数的除法和减法,合约 Main 在下面的例子中指定了一个 view 函数。

输出

Solidity - View and Pure Functions

纯函数

Pure 函数仅使用提供给它们的参数或它们包含的任何局部变量返回值;它们不读取或更改状态变量。 如果在 pure 函数中找到读取状态变量、访问地址或余额、访问全局变量、调用非 pure 函数等语句,编译器会发出警告。

Solidity 中,pure 函数提升了 view 函数的概念。 它们不读取或访问任何状态变量,也不修改状态。 Pure 函数仅取决于提供给它们的输入参数;它们是完全独立的。

示例:合约 Main 在下面的例子中定义了一个 pure 函数来计算两个整数的除法和减法。

输出

Solidity - View and Pure Functions

pure 和 view 函数的区别

View 和 pure 的区别在于,view 说明函数可以从区块链读取,但不能更改合约的状态,而 pure 说明函数既不能从区块链读取,也不能更改合约的状态。 当函数需要访问或读取状态变量、余额或从不改变状态的其他函数或合约读取时,它使用 view 修饰符。

使用: 使用 pure 修饰符的函数仅根据输入参数执行计算或操作,也就是说,无需从区块链获取任何信息。

演示

输出

Solidity - View and Pure Functions

当“离链”调用 view 和 pure 函数时,例如从 Web3 提供程序调用,它们不使用 gas,因为它们不修改任何状态。

使用 Pure 和 View 函数的优点

  • 安全性: 通过明确将函数指定为 view 或 pure,您可以向其他开发人员和审计员阐明其预期行为。 这降低了创建漏洞的可能性,并有助于防止对状态的意外更改。
  • Gas 效率: View 和 pure 函数不需要进行区块链交易即可执行。 由于它们不使用任何 gas,因此它们在数据检索和计算方面更经济高效。
  • 代码可重用性: 外部合约或同一合约内的其他函数可以调用 view 和 pure 函数。 由于这些函数可以在许多上下文中重复使用,而不必担心状态更新,因此它们鼓励代码可重用性和模块化架构。
  • 优化: 编译器更积极地优化 pure 函数,因为它们是完全独立的,并且不依赖于外部变量。 这可能会提高性能并降低汽油价格。