今回はEthereumのスマートコントラクトを開発する際に用いる言語である、Solidityの基礎となるデータ型をまとめて解説していきます。
基本的な8つの型
Solidityには大きく8つの型が存在しています。
int | 符号付き整数 |
---|---|
uint | 符号なし整数 |
string | 文字列 |
bool | ブーリアン |
Array | 配列(固定、可変) |
Struct | 構造体 |
address | アドレス |
mapping | マッピング(連想配列のようなもの) |
int・uint
様々なサイズの符号付き(int)、符号なし(uint)のデータ型です。
int8~int256, uint8~uint256などまで、8の倍数だけ型が存在しています。
※未指定の場合、256bitとなる。
この8の倍数はbit数を表しているため、例えばuint8の場合、0~255が値の範囲となります。
string
文字列を格納するデータ型です。
他の言語と異なる点としては、文字列同士で比較をすることができない点です。
文字列同士で比較を行う際は、一度、Keccak256関数(ハッシュ関数)を使って文字列をbytes32型にし、その値で比較する必要があります。
bool
ブーリアンは他の言語と同じように、true(真)、false(偽)を格納するデータ型です。
比較演算子についても、他の言語と似た形で使用可能です。
ただし、Solidityのbool型は、短絡評価となっているため、複数の条件のいずれかがfalseであることが分かったとき、その時点で評価の処理を中断します。
Array
配列が格納されるデータ型です。
固定長、可変長いずれの配列も扱うことが可能です。
struct
構造体を格納するデータ型です。
C++などと同様にstructを用いて定義します。
このときuintなどの値で、可能な限りbit数を下げることができれば、容量を下げ、GASの節約に繋がります。
address
ウォレットのアドレス(送金先)や、コントラクトのアドレスなどが格納されるデータ型です。
サイズは20バイト、整数型と同じ比較演算子を持っており、address型特有のメソッドも存在しています。
balance | アドレスが持つEtherをWei単位で返します。 返り値の型はuint256となります。 |
---|---|
transfer(uint256 amount) | アドレスへEtherをWei単位で送金します。 このとき、処理に失敗すると例外がthrowされます。 |
send(uint256 amount) | アドレスへEtherをWei単位で送金します。 このとき、処理に失敗するとfalseを返します。 |
mapping
マッピング型は他言語で言うところの連想配列です。
KeyとValueを関連付けることができます。
このときValueのオブジェクトにはstructを設定することも可能です。