[DAppsプログラミング]Solidityの関数と関数修飾子(modifier)

プログラミング

スマートコントラクトプログラミング言語であるSolidityの関数について記載します。

Solidityの関数

Solidityでの関数は、プログラムのどこからでも呼び出すことができる再利用可能なコードのグループのことをさします。

関数があることによって、同じコードを何度も記述する必要がなくなります。

これは、Solidityプログラマがコードをモジュール化して作成するのに役立ちます。

関数を使用すると、プログラマは大きなプログラムをいくつかの小さくて扱いやすい関数に分割できます。

他の高度なプログラミング言語と同様に、Solidity 、関数を使用してコードをモジュール化するために必要なすべての機能もサポートしています。

今回は、Solidityの関数を作成する方法について説明します。

Solidityで関数を定義する方法

関数を使用する場合、関数定義をする必要があります。

Solidity で関数を定義する最も一般的な方法は、functionキーワードを使用することです。

その後に一意の関数名、引数(パラメーター)のリスト (空の場合もあります)、および{}(中かっこ)で囲まれたステートメントブロックに関数内で行いたい処理を記述する必要があります。

下記は、基本的なSolidityの関数の構文を示しています。

下記スマートコントラクトのコードは、引数(パラメータ)を渡さない単純なFunctionSample関数を定義しています。

このスマートコントラクトをDeployし、getファンクションを呼び出すと、下記値が表示されます。

$ decoded output
{
“0”: “uint: 3”
}

Solidityで関数を呼び出す方法

コントラクト内のどこかで関数を呼び出すには、関数の名前を記述して呼び出す必要があります。

関数の呼び出す際に、さまざまなパラメーターを渡す機能があります。

渡されたパラメーターは関数内で使用でき、それらのパラメーターに対して任意の操作を実行できます。

関数はコンマで区切られた複数のパラメーターを受け取ることができます。

次のコードでは、Solidityの関数でどのように関数を呼び出すのか、引数の指定、受け取り方法を記載しています。

このスマートコントラクトをDeployし、compareファンクションを呼び出すと、下記値が表示されます。

$ decoded output
{
“0”: “string: a and b are not same”
}

関数の戻り値 Returnステートメント

Solidityの関数には、オプションのreturnステートメントを含めることができます。

このReturnステートメントは、関数内の最後のステートメントである必要があります。

関数から値を返す場合にReturnステートメントが必要になりますが、返り値がない場合は省略可能です。

Solidity では、関数は複数の値を返すこともできます。以下の例を参照してください。

また、returnを省略し、下記のように変数名だけで返り値を表現することも可能です。

このスマートコントラクトをDeployし、getファンクションを呼び出すと、下記のように配列の値が表示されます。

$ decoded output
{
“0”: “uint256: product 2”,
“1”: “uint256: sum 3”
}

関数修飾子(modifier)

関数修飾子(modifier)は、関数に前提条件を追加し、関数の動作を変更するために使用されます。

パラメーター付きまたはパラメーターなしで修飾子を作成します。

以下のコードはmodifierを定義したスマートコントラクト例です。

まだ,modifierを呼び出す関数は記述していません。どのように定義するかをまずは確認してみてくだし。

modifierは、特殊記号である”_;“が出現する部分に関数本体が挿入される仕様となっています。

したがって、この関数を呼び出したときにmodifierの条件が満たされていれば関数が実行され、そうでない場合は例外が投げられます。

以下のソースコード例を見てください。

このコードでは、下記のような仕組みでmodifierを使って関数実行前に前提条件を確認しています。

register関数:costsのmodifierでpriceよりもmsg.value(送信者のvalue)が多いことを確認してから実行する関数

changePrice関数:onlyOwnerのmodifierでコントラクトを実行したアドレスとownerが等しいか確認してから実行する関数

最後に

今回紹介したSolidityの仕様やコードをRemix IDEHardhatで実際に実行やテストをして確認してみましょう。

実際に動かしたり、テストすることで理解が深まるかと思います。

hardhatのインストール手順

Ethereum(イーサリアム)のDApps開発環境Hardhatのインストール手順
Ethereum(イーサリアム)のローカル開発環境であるHardhatのインストール手順を記載します。 Hardhatとは? Hardhatは、Solidityなどで開発したイーサリアムのスマートコントラクト、Dappsをコ...

HardhatでスマートコントラクトのDeploy手順

[Hardhat]SolidityでHello Worldのスマートコントラクトを作成
Solidityを使ってHello Worldを作成してみましょう SolidityでHello World! 前提条件 ・Hardhat デフォルト・フォルダ構成 Hardhatについては下記記事を参照ください。 ...
タイトルとURLをコピーしました