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