Solidity

【Solidity】第4章第1回:配列の基本:固定長と動的配列

本記事では、Solidityにおける配列の基本的な仕組みについて解説します。固定長配列と動的配列の違いや使い方を理解することで、効率的なスマートコントラクトの設計が可能になります。

0. 記事の概要

この記事を読むメリット

  • 配列の基礎理解:固定長配列と動的配列の特徴と違いを学べます。
  • 適切なデータ構造の選択:プロジェクトに合った配列の使い方を選べるようになります。
  • 実践力の向上:配列操作の具体例を通じて、コントラクト設計のスキルが向上します。

この記事で学べること

  • 固定長配列と動的配列の基本
  • 配列操作の実例(追加、削除、検索)
  • よくあるエラーとその解決策

1. 配列とは?

1.1 配列の基本構造

配列は、同じデータ型の値をまとめて格納できるデータ構造です。Solidityでは、配列は固定長と動的の2種類に分類されます。

1.2 固定長配列と動的配列の違い

以下に、両者の違いを表でまとめます:

固定長配列動的配列
サイズが固定されており変更不可サイズが可変で要素を追加・削除可能
メモリ消費が少ない柔軟性が高い
初期化時にサイズを指定初期化時にサイズ指定不要

2. 固定長配列の基本

2.1 固定長配列の定義

// 固定長配列の例
contract FixedArrayExample {
    uint256[5] public fixedArray = [1, 2, 3, 4, 5];
}

動作解説

uint256[5]で固定長配列を定義しています。この場合、配列のサイズは5に固定され、変更できません。

2.2 固定長配列の操作

固定長配列はサイズが固定されているため、要素を追加・削除することはできません。ただし、インデックスを指定して要素を上書きすることは可能です。

// 固定長配列の操作
contract FixedArrayOperations {
    uint256[5] public fixedArray = [1, 2, 3, 4, 5];

    function updateElement(uint256 index, uint256 value) public {
        require(index < fixedArray.length, "無効なインデックスです");
        fixedArray[index] = value;
    }
}

動作解説

指定されたインデックスの要素を新しい値に更新します。

3. 動的配列の基本

3.1 動的配列の定義

// 動的配列の例
contract DynamicArrayExample {
    uint256[] public dynamicArray;

    function addElement(uint256 value) public {
        dynamicArray.push(value);
    }
}

動作解説

動的配列はpushメソッドを使用して新しい要素を追加できます。

3.2 動的配列の削除

// 動的配列の要素削除
contract DynamicArrayDelete {
    uint256[] public dynamicArray = [1, 2, 3, 4, 5];

    function removeElement(uint256 index) public {
        require(index < dynamicArray.length, "無効なインデックスです");
        dynamicArray[index] = dynamicArray[dynamicArray.length - 1];
        dynamicArray.pop();
    }
}

動作解説

要素を削除する際には、削除対象の要素を配列の最後の要素で上書きし、popで最後の要素を削除します。

4. よくあるエラーとその解決策

4.1 インデックス範囲外エラー

配列操作時に有効なインデックスをチェックすることで、このエラーを防ぐことができます。

4.2 メモリ不足エラー

動的配列を扱う際に大量の要素を追加すると、ガス不足が発生する可能性があります。必要なガス量を見積もり、処理を分割することが有効です。

5. 練習問題

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

  1. 固定長配列に新しい要素を追加しようとした場合のエラーを確認してください。
  2. 動的配列に複数の要素を追加し、そのすべてを削除する関数を作成してください。

6. まとめ

本記事では、Solidityにおける配列の基本について学びました。固定長配列と動的配列の特性を理解し、それぞれの適切な使用方法をマスターすることで、効率的なコントラクト設計が可能になります。