【Solidity基礎】固定長配列・可変長配列とは?
はじめに...
Solidityの固定長配列についてイメージが湧くように解説していきます。
まずはコードを記載して、そのあと解説をします。
// 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上で考えてみます。
➀文字列を入れる場合
(※ライセンスやバージョンの部分の解説は省略します)
string[3] arrayA;
これは何をしているかというと、
文字だけ(string)を入れることができる
arrayA
という弁当箱を用意しましたよ
という記述です。
Solidityでは型を指定して記述する言語ですので、
string
やunit
などが必要です。
そして、よーく見ると、
string[3] arrayA;
stringの後に [3] と書いてあります。
これは、 弁当箱に3つの部屋があるよ
という意味です。
(最初に上のように定義した以上、
arrrayAの弁当箱の部屋の数は変えられません。)
部屋の数を変える記述は後で説明します。
次に、
fuction setArray() public {
arrayA[0] = "apple";
arrayA[1] = "lemon";
arrayA[2] = "orange";
}
setArrayという関数を定義しています。
これは何をしているかというと、
先ほど用意した弁当箱の
1つ目の部屋にapple、
2つ目の部屋にlemon、
3つ目の部屋にorange、
をそれぞれ入れたよ
という関数です。
なので流れとして、
・空の弁当箱を用意(部屋は3つ)
・弁当箱にapple,lemon,orangeを入れた
という意味になるんです。
➁数値を入れる場合
文字列を入れる場合とほぼ一緒です。
部屋に入れることができるのが、
文字列か数値の違いだけですね。
なので、
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