Solidityにあるviewとpure修飾子の使い方【初心者向け】

初心者向けにSolidityのview pureの使い方について解説しています。これらは関数に対して使われる修飾子(関数修飾子)となります。viewとpureそれぞれの役割と使用例について見ていきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Solidityのviewとpureの使い方について解説しています。

それぞれの修飾子について説明しているので、Solidityを使った実装を行う上でぜひ理解しておきましょう。

 

なお本記事は、TechAcademyのブロックチェーンオンライン講座の内容をもとに作成しています。

 

田島悠介

今回は、ブロックチェーンに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Solidityのview pureの使い方について詳しく説明していくね!

大石ゆかり

お願いします!

 

関数修飾子

Solidityには、様々な修飾子があります。

修飾子とは、識別子の性質を決めるために付ける予約語のことを言います。簡単に言えば、適用可能範囲(スコープ:見える使える範囲)を表す予約語と言うことです。予約語ですので、そのまま変数名などには使えませんのでご注意を。

Solidityにある代表的な修飾子の中に、ちょっと変わった修飾子があります。viewとpureです。

関数修飾子と良い、関数(function)に対して使用する修飾子となります。関数が取り扱う変数は、そのスコープによってGASを大量に消費することになります。

ガスコストは、Solidity開発では意識しておかないとトランザクション処理のコスト(GAS)に跳ね返ってきますので注意が必要なので実装されました(Ver0.4.16から)。

関数(function)の文法は、以下の通りです(solidity.readthedocs.io中の「Function Types」参照)。この中に、viewとpureが存在します(太字にしています)。

function (<parameter types>) {internal|external} [pure|constant|view|payable] [returns (<return types>)]

 

viewとは

Databaseのviewは、参照のみの可能なテーブルを指します。

Solidity上のviewも似たようなものですが、対象はブロックチェーンです。ブロックチェーンから値を取得することは可能ですが、値を書き込むことはできません。

ブロックチェーンに値を書き込むことは、GASを消費することになります。しかし、ブロックチェーンから値を参照することは、GASを消費しません。

例)

contract Selector {
  function f() public view returns (bytes4) {
    return this.f.selector;
  }
}

 

[PR]ブロックチェーンで挫折しない学習方法を動画で公開中

pureとは

pureとは、本来は純粋なとかの意味で使用されることが多いです。今回の場合は、純粋に関数内でしか使えないと解釈すれば良いかと思います。

function(関数)を純粋に使うとでも解釈すれば良いのでしょうか、関数に渡された引数しか扱うことができません。

ですので、ブロックチェーン上の値に書き込むことも参照することもできなくなります。C言語などで言えば、private function と言えば解りやすいですかね。

例)

contract Selector {
  function f(uint a, uint b) public pure returns (bytes4) {
    return a*b;
  }
}

 

以上、Solidityのview pureの使い方を解説しました。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

また、オンラインのプログラミングスクールTechAcademyでは、ブロックチェーンオンライン講座を開催しています。

ブロックチェーン技術の仕組みを理解し、実際に分散型アプリケーションを開発することができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。