什麼是 Solidity 函式?
作者 Alchemy
Solidity 函式有多種類型,包括 view 函式、pure 函式、特殊函式以及 fallback 函式。函式也可以用函式可見性屬性來修飾,包括 public、external、internal 和 private。本文將介紹 Solidity 函式類型、語法、如何閱讀函式以及可見性。
什麼是 Solidity 函式?
Solidity 函式是完成特定任務的獨立程式碼模組。 就像其他web3 程式語言一樣,Solidity 讓開發者可以透過函式撰寫模組化程式碼,來消除重複撰寫相同程式碼的冗餘。開發者可以在程式需要時呼叫函式,而不必重寫。
如何撰寫及閱讀 Solidity 函式
要撰寫 Solidity 函式,開發者需要依照正確的語法來架構函式,並確保寫出其基本組成部分,以確保函式能正確執行。
Solidity 函式語法
請使用以下語法來建立你的 Solidity 函式,如下方範例所示:
- 使用 function 關鍵字定義函式
- 為函式建立一個名稱,該名稱須為唯一,且不能與任何保留關鍵字重複
- 列出任何參數,包含參數的名稱與資料型別,或不包含額外參數
- 建立一個以大括號包圍的陳述式區塊
注意:Solidity 事件的宣告方式與函式類似。事件與函式對於高階 dApp 開發都是不可或缺的。
下圖顯示了 Solidity 函式的三個主要組成部分:
- 函式名稱
- 函式型別
- 回傳型別

Solidity 函式有哪些不同的類型?
本節將介紹各種 Solidity 函式類型,包括 view 函式、pure 函式、特殊函式以及 fallback 函式。
1. View 函式
在 Solidity 中,view 函式是唯讀的,不能改變智慧合約中定義的狀態變數。view 函式的語法如下:
2. Pure 函式
pure 函式宣告不會改變或讀取任何狀態變數。pure 函式通常用於一些常見的工具或計算功能。pure 函式的語法如下:
3. 特殊函式
Solidity 有幾個在開發智慧合約時可以使用的特殊函式。Getter 函式和 receive 函式是 Solidity 智慧合約中重要的可支付函式。
Getter 函式
定義為 public 的狀態變數會有一個由編譯器自動建立的 getter 函式。此函式與該變數同名,且具有 external 可見性。
Receive ether 函式
一個合約最多只能有一個 receive 函式。receive 函式不能有參數、不能有回傳值,且必須具備 external 可見性以及 payable 狀態可變性。
當呼叫合約並附帶傳送 Ether,但未指定任何函式時,就會執行 receive 函式。此函式的宣告方式如下:
4. Fallback 函式
在 Solidity 中,fallback 函式是一個沒有名稱、參數或回傳值的 external 函式。當函式識別碼與智慧合約中任何可用函式都不相符時,或函式呼叫沒有附帶任何資料時,就會執行 fallback 函式。
什麼是函式多載?
函式多載是指在同一個作用範圍內,對同一個函式名稱有多個定義。這些函式定義彼此之間必須在引數列表的型別及/或數量上有所不同。你不能僅以回傳型別不同來多載函式宣告。
Vyper 處理函式多載的方式與 Solidity 有何不同?
與 Solidity 不同,Vyper 這個基於 Solidity 的 Python 風格語言並不支援函式多載。在 Vyper 中嘗試進行函式多載會導致「Duplicate function or event name」錯誤。
函式可見性代表什麼意思?
指定函式可見性讓我們能夠控制哪些實體可以呼叫智慧合約中的函式。呼叫者共有三種類型:
- 主合約本身
- 從主合約衍生(即繼承)的合約
- 第三方
函式可見性可協助你控制上述哪些呼叫者能夠執行該函式。函式可見性共有四種類型:
- Public
- External
- Internal
- Private
函式的可存取性從 External 到 Private 依序遞減:public 函式的可存取性最高,private 函式的可存取性最低。
External 與 public 的比較
External 與 public 是兩種可以從合約外部呼叫的函式可見性。External 表示該函式只能由其他合約或外部擁有帳戶(EOA)呼叫。Public 表示該函式可以從外部呼叫,也可以從合約內部呼叫。
Internal 與 private 的比較
與 external 及 public 相反,internal 與 private 都不允許外部實體存取該函式。對於 private 函式,只有同一合約內的函式可以呼叫它。對於 internal 函式,同一合約內的函式或衍生合約內的函式都可以呼叫它。
繼續學習 Solidity 函式
本文已為你介紹了 Solidity 中的函式。若要繼續學習,請報名 Alchemy University 的 Ethereum Developer Bootcamp,即可免費參加為期 7 週的非同步 Solidity 速成課程。如果開發者對開發工作完全陌生,Alchemy University 的3 週 JavaScript 速成課程是開始 Ethereum bootcamp 之前很好的先修課程。
相關總覽

打造區塊鏈魔法
Alchemy 結合最強大的 Web3 開發者產品與工具,並提供資源、社群與卓越的支援。


