這個章節開始介紹 合約中的function,此章節很重要
function 架構如下:
標示了架構特殊的是 可見性修飾器、可變性修飾器
1.可見性修飾器
public
內外部都可使用
external
外部可調用裡面不能調用
Internal
本合約可以調用,子合約也可調用外部不行
private
只能在本合約使用
下列為範例程式:
contract PublciInternalPrivateExternal {
uint256 age = 100;
function getAgeWitPublic() public view returns (uint256) {
return age;
}
function getAgeWithInternal() internal view returns (uint256) {
return age;
}
function getAgeWithPrivate() private view returns (uint256) {
return age;
}
function getAgeExternal() external view returns (uint256) {
return age;
}
function callFunction() public view returns (uint256) {
return getAgeWitPublic();
}
}
執行結果如下:
我們可以發現 getAgeWithInternal()、getAgeWithPrivate() 這是不能給外部調用的,如果你在合約中看到,但也無法使用。
2.可變性修飾器
view
可以訪問鏈上的資料但不能修改(只能訪問)。
pure
不可以返回鏈上的資料,相對嚴謹,Function裡的變數只能在合約中使用。(工具類使用)
payable
這個修飾器事告知可以交易數值的修飾,後續ERC20 會講述,此不多加解釋。
共通點:
通常view 、pure 都是會有返回值的
這兩類的修飾是不消耗gas的
下列程式說明:
contract ViewPrueExample {
uint public age;
function increaseAge() public {
age++; // 設定變數
}
function getAgeWithView() public view returns (uint){
return age;
}
function getAgeWithPrue() public pure returns (uint){
return 100;
}
}
分別來看執行結果
function increaseAge() public
我們看到在內容中出現了 transaction cost 這部分就會是交易手續費(gas)(真金白銀)
function getAgeWithView() public view returns (uint)
下面我們看到並沒有transaction cost 這部分所以是不耗手續費(gas)
當然我們可以偷懶看 [打勾] icon
function getAgeWithPrue() public pure
和View 一樣沒有消耗手續費(gas)
如果你試著要傳出內部變數得值的話就會發出錯誤
有任何問題可反饋: [email protected]