イーサリアムの開発言語である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ともに外部コントラクトから呼び出された場合、ガスは発生しません。ただし、内部コントラクトから呼び出した場合、ガスが発生する点に注意が必要です。
特定のロジックでデータを取得・参照するような用途が主かと思います。