智能合約開發實戰(八) - 函式修飾詞

2022/02/26閱讀時間約 3 分鐘
我們知道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,可說是一舉兩得呀。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享,謝謝。
如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。
為什麼會看到廣告
宅D嘉
宅D嘉
有著十年以上的軟體開發經驗,喜歡投資理財,目前喜歡研究區塊鏈相關,了解虛擬貨幣投資或者是區塊鏈開發,喜歡把複雜的東西簡單化,樂於分享我的理財投資生活。
留言0
查看全部
發表第一個留言支持創作者!