【Solidity】データ型まとめ

Solidityにおけるデータ型のまとめを解説します。

Solidityのデータ型一覧

Solidityのデータ型一覧を表にしました。

データ型取り得る値デフォルト値備考
bool真偽値
(true/false)
false無し
int符号付き整数
(-2 ** n-1 〜 2 ** n-1 - 1)
0int8〜int256と8bitずつ存在。
intはint256と同義(エイリアス)。
uint符号無し整数
(0 〜 2 ** n - 1)
0uint8〜uint256と8bitずつ存在。
uintはuint256と同義(エイリアス)。
fixed符号付き固定小数点数0fixed8〜fixed256と8bitずつ存在。
fixedはfixed256と同義(エイリアス)。
ufixed符号無し固定小数点数0ufixed8〜uint256と8bitずつ存在。
uintはuint256と同義(エイリアス)。
addressEthereumアドレスaddress(0)(0x0000000000000000000000000000000000000000)無し
bytesバイト配列0x無し
string文字列""(空文字)無し
enum列挙型列挙型における最初の要素定数を列挙することが可能(値は最初の要素を0として順に割り振られる)。
struct構造体-異なるデータ型の変数を単一の型に纏めることが可能。
mappingマッピング/キーと値のペアマッピングの値のデータ型による無し
array配列[](空配列)固定長配列、可変長配列の2つが存在。
データ型一覧(Solidity)

サンプルコード

// 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];

}

各データ型によってコスト(ガス代)が異なります。より洗練されたアプリケーションを作成する場合、データ型ごとのコストも把握しておきましょう。

タイトルとURLをコピーしました