状態修飾子view,pureの違いと使い方、注意点【Solidity】【ブロックチェーン・仮想通貨】

イーサリアムの開発言語であるSolidityで扱う、関数状態修飾子(view,pure)の違いと使い方、注意点について紹介しています。

view

関数の実行によって、データの保存・変更がされない関数となります。いわば、読み取り専用のようなものです。

状態変数を参照することは可能ですが、書き換えたり、直接返すような使い方はNGとなります。

OKパターンとNGパターンは以下のようになります。

contract test {
    uint num = 5;

    //OK
    function fun1() public view returns(uint) {
        uint result = num;
        return result;
    }

    //OK
    function fun2() public view returns(uint) {
        uint result = num + 1;
        return result;
    }

    //NG
    function fun3() public view returns(uint) {
        num++;
        uint result = num;
        return result;
    }

    //NG
    function fun4() public view returns(uint) {
        return num;
    }

}

pure

viewの特徴に加えて、ブロックチェーンのデータを読み取ることが出来ません。要するに、関数内のローカル変数しか参照できないということです。

viewで示したOKパターンの使い方は、NGとなります。

contract test {
    uint num = 5;

    //NG(状態変数を参照しているため)
    function fun1() public view returns(uint) {
        uint result = num;
        return result;
    }

    //NG(状態変数を参照しているため)
    function fun2() public view returns(uint) {
        uint result = num + 1;
        return result;
    }

    //OK
    function fun3() public view returns(uint) {
        uint result = 1;
        return result;
    }

}

いずれも外部からの呼び出しでガスは消費しない

view、pureともに外部コントラクトから呼び出された場合、ガスは発生しません。ただし、内部コントラクトから呼び出した場合、ガスが発生する点に注意が必要です。

特定のロジックでデータを取得・参照するような用途が主かと思います。

Solidity
この記事を書いた人

エンジニアとして仕事をしています。
仕事や趣味を通して、開発やプログラミングについて学んだことを綴っていきます。
 ・実務経験は、WEBシステムのサーバーサイドコーディングがメイン
 ・アプリ開発は趣味程度

akihiro-takedaをフォローする
akihiro-takedaをフォローする
プログラミング・開発の備忘録
タイトルとURLをコピーしました