Solidity

【Solidity】第3章第6回:ビュー関数(view)とピュア関数(pure)の違い

本記事では、Solidityにおけるビュー関数(view)とピュア関数(pure)の違いについて解説します。スマートコントラクト開発において、この2つの関数修飾子を正しく理解し活用することは、効率的なコード設計に欠かせません。

0. 記事の概要

この記事を読むメリット

  • ビュー関数とピュア関数の基本理解:それぞれの役割と違いを学べます。
  • ガス消費を最適化:適切な関数修飾子の選択により、不要なガス消費を抑える方法を理解します。
  • 効率的なコントラクト設計:状態変更の有無に応じて適切な関数を設計できます。

この記事で学べること

  • ビュー関数(view)の役割と使い方
  • ピュア関数(pure)の役割と使い方
  • よくある誤解とその解決方法

1. ビュー関数(view)とは?

1.1 ビュー関数の概要

ビュー関数は、スマートコントラクトの状態を読み取ることができる関数です。しかし、状態を変更することはできません。

1.2 ビュー関数の基本構文

以下は、ビュー関数の基本的な構文例です:

// ビュー関数の例
contract ViewExample {
    uint256 public number = 42;

    function getNumber() public view returns (uint256) {
        return number;
    }
}

動作解説

この関数は、numberという状態変数を返しますが、状態を変更することはありません。

2. ピュア関数(pure)とは?

2.1 ピュア関数の概要

ピュア関数は、スマートコントラクトの状態を一切読み取らず、入力値に基づいて処理を行う関数です。

2.2 ピュア関数の基本構文

以下は、ピュア関数の基本的な構文例です:

// ピュア関数の例
contract PureExample {
    function add(uint256 a, uint256 b) public pure returns (uint256) {
        return a + b;
    }
}

動作解説

この関数は、2つの入力値abを加算して、その結果を返します。状態変数に依存しません。

3. ビュー関数とピュア関数の違い

3.1 状態変数の読み取り

ビュー関数は状態変数を読み取ることができますが、ピュア関数は読み取ることができません。

3.2 状態変更の有無

ビュー関数もピュア関数も状態を変更することはできません。ただし、ビュー関数は状態変数にアクセス可能です。

3.3 ガス消費

どちらの関数もトランザクション内ではガスを消費しません。ただし、ビュー関数は状態変数を読み取るため、計算コストが異なる場合があります。

4. よくある誤解とその解決策

4.1 状態変更の誤解

ビュー関数やピュア関数が状態を変更できると誤解されることがあります。正確には、どちらも状態を変更することはできません。

4.2 ガス消費に関する誤解

ビュー関数やピュア関数は、トランザクションとして呼び出された場合のみガスを消費します。

5. 練習問題

以下の課題に挑戦してみましょう:

  1. 2つの数値を入力として受け取り、その積を返すピュア関数を作成してください。
  2. スマートコントラクトの状態変数を読み取るビュー関数を作成してください。

6. まとめ

本記事では、Solidityにおけるビュー関数とピュア関数の違いについて解説しました。それぞれの適切な使い方を理解することで、効率的でガス消費を最適化したスマートコントラクトを設計することが可能です。次回は、支払い可能関数(payable)の基本について学びます。