我們知道function除了四種可見度 (visibility) 之外,還有三種比較常見的函式修飾詞(view、pure、payable),這篇就也來認識一下這三種函式修飾詞是做什麼用的吧。
View
當函式不修改任何狀態時,可以在函式宣告時標記"view"關鍵字
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
contract ViewAndPure {
uint c = 3; //狀態變數
constructor(){
}
//使用view,當函式不修改任何狀態時,可以在函式宣告時標記"view"關鍵字
function _view(uint a, uint b) public view returns (uint){
return a * (b + 11) + c;
}
}
Pure
當函式不讀取或不修改狀態時,可以在函式宣告時標記"pure"關鍵字
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
contract ViewAndPure {
uint c = 3;//狀態變數
constructor(){
}
//當函式不讀取或不修改狀態時,可以在函式宣告時標記"pure"關鍵字
function _pure(uint a, uint b) public pure returns (uint){
//當這樣寫的時候就會報錯,因為pure不能讀取和修改狀態,要去掉"c"
//return a * (b + 11) + c;
return a * (b + 11);
}
}
Payable
讓函式可以接收以太幣
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
contract ViewAndPure {
constructor(){
}
//讓函式可以接收以太幣
function _payable(uint _value) public payable {
// ....
}
}
從上面的程式碼可以看出,除了Payable是用來接收以太幣的之外,主要最常用的就view和pure了,這兩個也是最多人比較的,其實兩個很容易理解的,view就是可以讀取狀態變數的但不能去改變它,而pure是除了不能改變之外也不能去讀取狀態變數,不然就會報錯,好處當然是沒有讀取也沒有改變就不會消耗Gas fee,所以在function內,為了防止不小心在不需要改變狀態變數的function內去用到或是改變了狀態變數,所以適時的在function上加入view和pure,除了可以防呆之外還能省Gas fee,可說是一舉兩得呀。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享,謝謝。
如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。