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

更新於 發佈於 閱讀時間約 4 分鐘

我們知道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,可說是一舉兩得呀。

有什麼想要了解或是不清楚的部份,歡迎留言和我分享,謝謝。
如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。



留言
avatar-img
留言分享你的想法!
avatar-img
宅D嘉的開發人生
20會員
45內容數
加密貨幣很有趣,遊戲開發也很有趣,AI也有點意思,身為一個跨多領域的軟體工程師,喜歡研究新鮮的事物,歡迎來到我的世界,一起坐上這艘開往未來探索新奇的列車。
宅D嘉的開發人生的其他內容
2025/03/28
    每個程式開發的開始都是從Hello World開始的,當然我也不免淑的來個Hello World。
2025/03/28
    每個程式開發的開始都是從Hello World開始的,當然我也不免淑的來個Hello World。
2025/03/22
 Cocos Creator 2D實戰(一) 環境設定 第二步先做環境設定:環境設定、VS Code 正常來說跟著做就可以完成環境設定了,由於是開發2D,所以右上角先選擇2.4版(目前最高版本)會比較好,比較不容易錯亂,畢竟3.x和2.x的差異很大。
Thumbnail
2025/03/22
 Cocos Creator 2D實戰(一) 環境設定 第二步先做環境設定:環境設定、VS Code 正常來說跟著做就可以完成環境設定了,由於是開發2D,所以右上角先選擇2.4版(目前最高版本)會比較好,比較不容易錯亂,畢竟3.x和2.x的差異很大。
Thumbnail
2025/03/21
Cocos Creator 實戰     Cocos Creator是個用來開發2D或是3D遊戲的整合開發環境(IDE),程式語言是使用Javascript或TypeScript,Unity是用C#,但如果是Cocos Creator 3D的話是只能用TypeScript,所以建議還是用TypeS
Thumbnail
2025/03/21
Cocos Creator 實戰     Cocos Creator是個用來開發2D或是3D遊戲的整合開發環境(IDE),程式語言是使用Javascript或TypeScript,Unity是用C#,但如果是Cocos Creator 3D的話是只能用TypeScript,所以建議還是用TypeS
Thumbnail
看更多
你可能也想看
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
  Soildity是一種風格類似JavaScript的強型別高階語言,專門用來進行智能合約的開發及編程。本文敘述solidity的獨特之處。   
Thumbnail
  Soildity是一種風格類似JavaScript的強型別高階語言,專門用來進行智能合約的開發及編程。本文敘述solidity的獨特之處。   
Thumbnail
Mapping(映射)就像是字典表一樣,鍵入「什麼樣的標題」對應到「什麼樣的內容」,而標題就是從內容提煉出來的一種簡短快速識別的標的,透過這種方式,我們未來找尋內文時,只要先透過標題來查找,絕對會比直接找內文快上好幾倍,因此Mapping常常應用在查找事物上,它有點像一般程式語言的HashTable
Thumbnail
Mapping(映射)就像是字典表一樣,鍵入「什麼樣的標題」對應到「什麼樣的內容」,而標題就是從內容提煉出來的一種簡短快速識別的標的,透過這種方式,我們未來找尋內文時,只要先透過標題來查找,絕對會比直接找內文快上好幾倍,因此Mapping常常應用在查找事物上,它有點像一般程式語言的HashTable
Thumbnail
簡單的來說就是把同類型常用的功能打包在一起,讓其他開發者能夠重複使用,達到資源有效利用的效果,以軟體開發來說就是減少多餘的程式碼,而Solidity語言中,Library可以視為物件導向中的靜態類別,不需要產生實體就能使用,因此能有效的減少Gas。 當我們剛完成一份合約時難免因為設計尚未考慮周全而導
Thumbnail
簡單的來說就是把同類型常用的功能打包在一起,讓其他開發者能夠重複使用,達到資源有效利用的效果,以軟體開發來說就是減少多餘的程式碼,而Solidity語言中,Library可以視為物件導向中的靜態類別,不需要產生實體就能使用,因此能有效的減少Gas。 當我們剛完成一份合約時難免因為設計尚未考慮周全而導
Thumbnail
Solidity支援兩種特殊的函數,分別是Fallback以及Receive,一個是處理合約中不存在的功能時進行的回退機制,而另一個Receive則是負責收款後的動作,但兩者稱為特殊函數的原因主要是跟我們一般函數不同的地方於它們是屬於匿名的函數,也就是不用給定Function名稱,因此才會較為特殊,
Thumbnail
Solidity支援兩種特殊的函數,分別是Fallback以及Receive,一個是處理合約中不存在的功能時進行的回退機制,而另一個Receive則是負責收款後的動作,但兩者稱為特殊函數的原因主要是跟我們一般函數不同的地方於它們是屬於匿名的函數,也就是不用給定Function名稱,因此才會較為特殊,
Thumbnail
為什麼要特別介紹可視範圍呢? 試想,假如我們的合約裡有些非常重要的內容只能侷限於合約內使用,此時就可以運用可視範圍的技巧,將某些重要的功能、狀態鎖定在合約內使用,不隨意開放給外部調用,避免汙染內部,但有些又是共用的內容及功能時,我們就可以利用公開的可視範圍讓相同的功能能夠重複使用。 合約中又可以依照
Thumbnail
為什麼要特別介紹可視範圍呢? 試想,假如我們的合約裡有些非常重要的內容只能侷限於合約內使用,此時就可以運用可視範圍的技巧,將某些重要的功能、狀態鎖定在合約內使用,不隨意開放給外部調用,避免汙染內部,但有些又是共用的內容及功能時,我們就可以利用公開的可視範圍讓相同的功能能夠重複使用。 合約中又可以依照
Thumbnail
資料型態在合約當中扮演著什麼角色呢? 我們在「【開發智能合約 — Solidity系列】實作篇Ep.2 — 合約中的基本組成元素」有介紹過狀態變數可以儲存一些變化值,而儲存什麼類型的值就是所謂的資料型態,不同的資料型態可以處理的事物也有所不同,因此我們也需要了解一些基本的資料型態以及特性之後,未來開
Thumbnail
資料型態在合約當中扮演著什麼角色呢? 我們在「【開發智能合約 — Solidity系列】實作篇Ep.2 — 合約中的基本組成元素」有介紹過狀態變數可以儲存一些變化值,而儲存什麼類型的值就是所謂的資料型態,不同的資料型態可以處理的事物也有所不同,因此我們也需要了解一些基本的資料型態以及特性之後,未來開
Thumbnail
上一篇我們談到「【開發智能合約 — Solidity系列】實作篇Ep.1 — 看懂智能合約的脈絡」,大致上理解每個檔案的每份合約都是一個個的區塊,而這一個篇章主要著重於合約中的每個區塊的組成元素進行分項說明。 今天的範例會以簡單的銀行存款與提款流程進行示範,過程中將一步步的使用上述7種元素完成功能,
Thumbnail
上一篇我們談到「【開發智能合約 — Solidity系列】實作篇Ep.1 — 看懂智能合約的脈絡」,大致上理解每個檔案的每份合約都是一個個的區塊,而這一個篇章主要著重於合約中的每個區塊的組成元素進行分項說明。 今天的範例會以簡單的銀行存款與提款流程進行示範,過程中將一步步的使用上述7種元素完成功能,
Thumbnail
介紹了這麼多Solidity的函數和方法,今天來寫一個簡單的錢包,順便介紹一下payable。
Thumbnail
介紹了這麼多Solidity的函數和方法,今天來寫一個簡單的錢包,順便介紹一下payable。
Thumbnail
這篇我們來談談有關Solidity Function visibility(能見度) Solidity的function visibility有四個關鍵字(private、internal、external或public)。
Thumbnail
這篇我們來談談有關Solidity Function visibility(能見度) Solidity的function visibility有四個關鍵字(private、internal、external或public)。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News