メインコンテンツまでスキップ

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;
}
}

Reference