スマートコントラクトプログラミング言語であるSolidityの構造体とEnum(列挙型)について記載します。
Solidityの構造体とEnum(列挙型)
Solidityの構造体
Solidity の構造体では、複数のプロパティを持つ複雑なデータ型を作成することができる仕様となっています。
構造体を作成することで、独自の型を定義することができ、関連するデータをグループ化するのに便利です。
また、Solidityの構造体はコントラクトの外部で宣言して、別のコントラクトでインポートすることもできます。
Solidityでは主にレコードを表現するために使用されます。
構造体を定義するには、struct キーワードを使用し、新しいデータ型を作成します。
Solidityの構造体の構文
1 2 3 4 |
struct <構造体名> { <データ型> 変数名_1; <データ型> 変数名_2; } |
構造体の任意の要素にアクセスするには、構造体変数とアクセスしたい要素を分離する「ドット演算子」を使用します。
1 |
bitcoiner.name |
下記ソースコードは、構造体Bitcoinerを定義し、オブジェクト化したbitcoinerの要素の値(Bitcoiner.name)を設定、取得するための関数を定義したコントラクトとなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// SPDX-License-Identifier: MIT pragma solidity >=0.4.16 <0.9.0; contract TestStruct { //構造体の宣言 struct Bitcoiner { string name; //Bitcoinerの名前 int age; //Bitcoinerの年齢 string sex; //Bitcoinerの出身地 } //構造体オブジェクトの宣言 Bitcoiner bitcoiner; //構造体オブジェクトbitcoinerに値を割り当てるsetBitcoinerファンクション function setBitcoiner() public { bitcoiner = Bitcoiner('Satoshi Nakamoto', 50, 'male'); } //構造体オブジェクトbitcoinerの名前を返すgetBitcoinerファンクション function getBitcoiner() public view returns (string memory) { return bitcoiner.name; } } |
Enum(列挙型)
列挙型(Enum)は、ユーザー定義のデータ型を作成する方法です。
列挙型は、あらかじめ定義されたいくつかの値のうちの1つで変数を制限し、これらの列挙型リストの値を列挙型と呼びます。
通常、積分定数の名前を提供するために使用され、メンテナンスと読み込み速度が向上するメリットがあります。また、enumを使用することで、コードのバグを減らすことができます。
オプションは0から始まる整数値で表され、列挙型にはデフォルト値を指定することもできます。
Solidityのenumの構文
1 2 3 4 5 |
enum <enumの名前> { element1, element2,...., element n } |
下記ソースコードは、列挙体countryを定義し、オブジェクト化したbitcoinerの要素の値(Bitcoiner.name)を設定、取得するための関数を定義したコントラクトとなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.4.16 <0.9.0; contract TestEnum { // Enumの作成 enum country { America,//Enum 0番目にアメリカを設定 China, //Enum 1番目に中国を設定 Japan //Enum 2番目に日本を設定 } // デフォルトの値を設定 country constant default_country = country.Japan; // 列挙体型の変数の宣言 country choice; // 選択肢の値を設定する関数 function set_country() public { choice = country.America; } // 選択した値を返す関数 function get_choice() public view returns (country) { //choiceはアメリカのため、0を返す return choice; } // デフォルトの値を返す関数 function get_defaultcountry() public pure returns(country) { //default_countryは日本のため、2を返す return default_country; } } |
最後に
今回紹介したSolidityの仕様やコードをRemix IDEやHardhatで実際に実行やテストをして確認してみましょう。
実際に動かしたり、テストすることで理解が深まるかと思います。
hardhatのインストール手順

HardhatでスマートコントラクトのDeploy手順
