Skip to content

Solidity中的只读函数 #61

Description

@MagicalBridge

基本概念

在Solidity中,viewpure是用于修饰函数的两个关键字,它们表明了函数对区块链状态的修改程度:

1. view 函数

  • view函数声明不会修改区块链的状态,但可以读取状态变量的值。
  • 这些函数主要用于返回某些状态变量的当前值或执行一些不会改变状态的计算。

2. pure 函数

  • pure函数声明既不会读取也不会修改区块链的状态。
  • 这些函数完全依赖于其输入参数,并且只执行与状态无关的计算。

view 函数示例

pragma solidity^0.8.26;
contractViewExample {
uint256public number;
constructor(uint256_initialNumber) {
number = _initialNumber;
}
// view函数,读取状态变量number,但不修改它function getNumber() publicviewreturns (uint256) {
return number;
}
// 非view函数,修改状态变量numberfunction setNumber(uint256_newNumber) public {
number = _newNumber;
}
}

在上面的示例中,getNumber是一个view函数,因为它读取了状态变量number但没有修改它。setNumber则是一个普通的非view函数,因为它修改了状态变量number

pure 函数示例

pragma solidity^0.8.26;
contractPureExample {
// pure函数,不读取也不修改任何状态变量function add(uint256a, uint256b) publicpurereturns (uint256) {
return a + b;
}
// 非pure函数,读取状态变量但不修改它function multiplyWithNumber(uint256a, uint256b) publicpurereturns (uint256) {
return a * b;
}
}

在上面的示例中,add是一个pure函数,因为它不依赖于任何状态变量,只依赖于输入参数ab进行计算。类似的,multiplyWithNumber也只依赖于其输入参数,并不读取或修改任何状态变量。

总结

  • view函数可以读取区块链上的状态,但不能修改它。
  • pure函数既不能读取也不能修改区块链上的状态。

这两种函数修饰符有助于优化合约的可读性和安全性,并且在编译时提供额外的错误检查。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions