Solidityにおけるデータ型のまとめを解説します。
Solidityのデータ型一覧
Solidityのデータ型一覧を表にしました。
データ型 | 取り得る値 | デフォルト値 | 備考 |
---|---|---|---|
bool | 真偽値 (true/false) | false | 無し |
int | 符号付き整数 (-2 ** n-1 〜 2 ** n-1 - 1) | 0 | int8〜int256と8bitずつ存在。 intはint256と同義(エイリアス)。 |
uint | 符号無し整数 (0 〜 2 ** n - 1) | 0 | uint8〜uint256と8bitずつ存在。 uintはuint256と同義(エイリアス)。 |
fixed | 符号付き固定小数点数 | 0 | fixed8〜fixed256と8bitずつ存在。 fixedはfixed256と同義(エイリアス)。 |
ufixed | 符号無し固定小数点数 | 0 | ufixed8〜uint256と8bitずつ存在。 uintはuint256と同義(エイリアス)。 |
address | Ethereumアドレス | address(0)(0x0000000000000000000000000000000000000000) | 無し |
bytes | バイト配列 | 0x | 無し |
string | 文字列 | ""(空文字) | 無し |
enum | 列挙型 | 列挙型における最初の要素 | 定数を列挙することが可能(値は最初の要素を0として順に割り振られる)。 |
struct | 構造体 | - | 異なるデータ型の変数を単一の型に纏めることが可能。 |
mapping | マッピング/キーと値のペア | マッピングの値のデータ型による | 無し |
array | 配列 | [](空配列) | 固定長配列、可変長配列の2つが存在。 |
サンプルコード
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract Test {
/* bool(真偽値) */
bool varBool = true;
/* int(符号付き整数) */
int varInt = -1;
int varInt8 = 1;
int varInt16 = -1;
int varInt32 = 1;
int varInt64 = -1;
int varInt128 = 1;
/* uint(符号無し整数) */
uint varUint = 1;
uint varUint8 = 1;
uint varUint16 = 1;
uint varUint32 = 1;
uint varUint64 = 1;
uint varUint128 = 1;
/* fixed(符号付き固定小数点数) */
fixed varFixed = -0.1;
fixed varFixed8 = 0.1;
fixed varFixed16 = -0.1;
fixed varFixed32 = 0.1;
fixed varFixed64 = -0.1;
fixed varFixed128 = 0.1;
/* ufixed(符号無し固定小数点数) */
ufixed varUfixed = 0.1;
ufixed varUfixed8 = 0.1;
ufixed varUfixed16 = 0.1;
ufixed varUfixed32 = 0.1;
ufixed varUfixed64 = 0.1;
ufixed varUfixed128 = 0.1;
/* address(Ethereumアドレス) */
address varAddress = 0x0000000000000000000000000000000000000000;
/* bytes(バイト配列) */
bytes varBytes = "0x0";
bytes1 varBytes1 = "0";
bytes32 varBytes32 = "0x1234567890";
/* string(文字列) */
string varString = "hello";
/* enum(列挙型) */
enum Colors {
Red, // 0
Green, // 1
blue // 2
}
/* struct(構造体) */
struct User {
uint id;
string name;
address balance;
}
/* mapping(マッピング/キーと値のペア) */
mapping (address => uint) balances;
/* array(配列) */
// 固定長配列
string[2] members = ["bob", "alice"];
// 可変長配列
uint[] numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
}
各データ型によってコスト(ガス代)が異なります。より洗練されたアプリケーションを作成する場合、データ型ごとのコストも把握しておきましょう。