見出し画像

Solidity勉強日誌⑥modifier関数とは?

modifier関数を宣言しておくと、スマートコントラクト上で関数が実行される前にmodifier関数を参照してくれるようになります。そうなると何が良いかというと、modifier関数で、ある条件を指定しておけば、その条件に合わなければ、その後の関数を実行しないコントラクトを書くことが出来ます。下記のように。driveCar関数を実行する前にolderThan修飾子(modifierで宣言してるやつね)を実行することになります。


mapping (uint => uint) public age;
modifier olderThan(uint _age, uint _userId) {
 require (age[_userId] >= _age);
 _;
}

function driveCar(uint _userId) public olderThan(16, _userId) {
 // 関数のロジックを記述する
}

olderThan修飾子は関数のように引数を取得できます。そして、その引数はdriveCar関数から渡されています。例えば、driveCar関数を実行しようとして、下記のようなコードを実行したとします。

driveCar(1);

driveCar関数が実行される前にolderThan修飾子が参照されて、userIdが1番のユーザーの年齢を設定した_age変数(今回はolderThan(16, _userId)とあるので16才と設定されていますね!)より大きいかを確認します!もし、15才以下であれば、driveCar関数が実行されないのです。

driveCar関数の中にrequire文を書けばいいじゃないかと思われる方もいると思いますが、複数回この条件を関数の中で使いたい時は、同じrequire文を何度も関数の中に書くよりも、この関数olderThan修飾子を参照していると書く方が楽になるし、読みやすくなります。

あ、あとmodifier修飾子には最後に下記を付けてあげて下さい。これでその後に出てくる関数を呼び出していることになっています。

_;

参考:CryptoZombies


この記事が気に入ったらサポートをしてみませんか?