🐡

【Solidity基礎】固定長配列・可変長配列とは?

2023/08/15に公開

はじめに...

Solidityの固定長配列についてイメージが湧くように解説していきます。
まずはコードを記載して、そのあと解説をします。

section1.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.21;

contract section1_contract {
  // 固定長配列 ➀ 文字列を入れる場合
  string[3] arrayA;
  fuction setArray() public {
    arrayA[0] = "apple";
    arrayA[1] = "lemon";
    arrayA[2] = "orange";
  }
  
  // 固定長配列 ➁ 数値を入れる
  uint[2] arrayB;
  function setArrayB() public {
    arrayB[0] = 12;
    arrayB[1] = 28;
  }
}

お弁当を作った経験はありますか?

タイトルで何言ってんだ?と思ったあなた、
大丈夫です。ちゃんと説明します。

皆さん、お弁当を作ったことはありますか?

自分で作ったことがなくても、
お母さんやお父さんに作ってもらった経験がある方も
いらっしゃると思います。

当たり前ですがお弁当を作ろうと思ったらまず、
空の弁当箱が必要ですよね?

それをSolidity上で考えてみます。

➀文字列を入れる場合

(※ライセンスやバージョンの部分の解説は省略します)

section1.sol
string[3] arrayA;

これは何をしているかというと、

文字だけ(string)を入れることができる
arrayAという弁当箱を用意しましたよ

という記述です。

Solidityでは型を指定して記述する言語ですので、
stringunitなどが必要です。

そして、よーく見ると、

section1.sol
string[3] arrayA;

stringの後に [3] と書いてあります。

これは、 弁当箱に3つの部屋があるよ
という意味です。
(最初に上のように定義した以上、
arrrayAの弁当箱の部屋の数は変えられません。)

部屋の数を変える記述は後で説明します。

次に、

section1.sol
  fuction setArray() public {
    arrayA[0] = "apple";
    arrayA[1] = "lemon";
    arrayA[2] = "orange";
  }

setArrayという関数を定義しています。
これは何をしているかというと、

先ほど用意した弁当箱の
1つ目の部屋にapple、
2つ目の部屋にlemon、
3つ目の部屋にorange、
をそれぞれ入れたよ

という関数です。

なので流れとして、

・空の弁当箱を用意(部屋は3つ)
・弁当箱にapple,lemon,orangeを入れた

という意味になるんです。

➁数値を入れる場合

文字列を入れる場合とほぼ一緒です。

部屋に入れることができるのが、
文字列か数値の違いだけですね。

なので、

section1.sol
uint[2] arrayB;
function setArrayB() public {
  arrayB[0] = 12;
  arrayB[1] = 28;
}

arrayBには数値(uint : 0以上の整数)が
[2] 個入るよ

そして、

arrayBという名前の弁当箱の
1つ目の部屋には 12 を入れて、
2つ目の部屋には 28 を入れる

という意味になります。

部屋の数を変えたい場合

先ほどそれぞれ、
string[3], uint[2]と記述されていましたが、

ここの記述を例えば

string[] arrayC;
uint[] arrayD;

とすることもできます。

[]の中が空欄になっているのがわかると思いますが、
これは「あらかじめ部屋の数は決めておかない」
という意味の書き方です。

なので、この配列のことを 可変長配列
と言ったりします。

逆に今まで見てきたような

string[3] arrayA;
uint[2] arrayB;

部屋の数を予め決めている配列を 固定長配列
といいます。

最後まで見ていただきありがとうございました!✨
分かりやすかったらぜひいいね💓 お願いします!

Discussion