Function
関数の宣言と利用方法について学習します
関数とは実行可能なコードの単位です
宣言
関数は以下のパーツの集合で宣言される
関数の用途に応じて各修飾子に適切な条件を設定する
function identifier(parameter-list) visibility state-mutability modifier-invocation returns (parameter-list) {statement}
identifier(parameter-list)
関数名と引数
オーバーロード(関数名は同じで引数がことなること)は可能
function sample(uint256 a) {
}
// overload is allowed
function sample(uint256 a,bytes32 b) {
}
visibility
Scopeで解説
state-mutability
storageへの干渉度によって修飾子を付ける必要がある
- storageへ書き込む場合
- 修飾子なし
- storageへ書き込まないが読み込む場合
view修飾子
- storageへ書き込まないし読み込みもしない場合
pure修飾子
contract VisibilitySample {
uint count;
function writeStorage() {
count += 1;
}
function viewStorage() view {
uint memoryCount = count;
}
function pureFunction() pure {
uint memoryCount = 1;
}
}
modifier-invocation
Modifierで解説
returns (parameter-list)
return文による関数の返り値を定義する
複数の返り値を持たせることも可能
つけない場合は返り値はなく、関数の最後に到達するかreturn;で返る
contract ReturnSample {
uint count;
function getCount() view returns(uint,uint) {
return (count,1);
}
function noReturns() pure {
uint memoryCount = 1;
return;
// not reachable
memoryCount = 2;
}
}
Call
関数を呼び出す際には引数の型指定は不要、修飾子の指定も不要
contract Call {
uint count;
function parentFunction() {
uint result = childFunction(1);
}
function childFunction(uint a) view returns(uint) {
return a + count;
}
}