day8. Solidity基本文法 – 値型 – 

Solidityには、値型(Value Types)、参照型(Reference Types)、マッピング型(Mapping Types)といった型の種類があります。このうち値型は、数字、文字列といった種類を定義するためのものです 値型には、値が直に保存されています(参照型との違いはday9で言及します)。

Solidityには、値型(Value Types)、参照型(Reference Types)、マッピング型(Mapping Types)といった型の種類があります。このうち値型は、数字、文字列といった種類を定義するためのものです
値型には、値が直に保存されています(参照型との違いはday9で言及します)。

TOC

ブール型

bool(ブール型)は、真偽値を表すデータ型です。”true”または”false”の2つの値を取ります。次にある、成功かどうかの状態を表す変数、isSuccessfulは初期値がfalseですが、後続でうまく行った場合、trueにすることができます。

Solidity
bool isSuccessful = false;

trueかfalseを計算するための演算子としては、次のものがあります。(例の中の変数a, bはいずれもbool型の変数だとし、a=true、b=falseだとします。)

  • ! … 否定
    • !a … aがtrueで、その反対なので、falseになります
  • && … and条件
    • a && b … 両方がtrueか、両方がfalseの場合にtrueになるので、falseになります
  • || … or条件
    • a || b … いずれかがtrueの場合trueになるので、trueになります
  • == … 等価(同じかどうか)
    • a == b … aとbが同じ値の場合にtrueになるので、falseになります
  • != … 不等価(同じでないかどうか)
    • a != b … aとbが異なる値の場合にtrueになるので、trueになります

整数型

intは整数、uintは正の整数をそれぞれ表すデータ型です。それぞれ、int8〜int256までとuint8〜uint256までの定義がありますが、int, uintに続く数字はビット数を表します。uint256などの最も大きい数字を使うケースが一番多いでしょう。uint256は、最大、2の256乗-1=非常に大きい数字、を扱うことができる整数型です。
次の例は、ETHの数量を示す変数の定義です。1e18とは、1000000000000000000と同じで、変数etherAmountは、1000000000000000000 Weiのことを示しています(通貨の単位については、こちらの記事に記載しています。)。

Solidity
uint256 etherAmount = 1e18;

アドレス型

addressは、Ethereumのアドレスを表すデータ型で、20バイトの値を持ちます。address型の値の例を見るには、実際にMetaMaskを開いてみるのが良いでしょう。
Metamaskを見てみると、AccountNと書かれた下に0xから始まる文字列があります。これがアドレスの値で右のアイコンからコピーすることができます。

Metamaskを見てみると、Account1の下に0xから始まる文字列があります。これがアドレスの値になります。

上記の図のaddress(テスト専用のアカウントです)の値は、”0x551af3f6A226a62BCb27f08B42401bd5629f2E44”です。
冒頭の”0x”は、16進数であることを示しています。16進数の1桁は、0〜15の数字で、表示上は、0〜9とa~fまでの文字列が利用されます。4bit(16種類)になります。551〜E44は全部で40文字になります。つまり、4bit x 40文字 = 160 bit = 20 byte となります。

Solidity
address public owner = 0x551af3f6A226a62BCb27f08B42401bd5629f2E44;

バイト型

bytes1〜bytes32までの固定長、1〜32バイトまでのバイト列と可変長のバイト列であるbytesの2つがあります。固定長とは、長さが固定であることを意味し、例えばbytes32は32バイトの長さになります。それに対して、可変長とは、長さが可変です。いずれも各要素は、1バイト(8ビット)のデータを格納します。

バイト配列はバイナリデータを効率的に格納し、操作するための便利なデータ型です。文字や画像などは、バイト配列で保有することができます。例えば、”cat”という文字列は、バイト配列で表現すると、0x123d33af44343になります。
色々な用途がありますが、例えば、ファイルの内容をバイナリ形式で格納する場合などにも使われます。

バイト配列とはなにかを理解するために参考になるQ&Aがこちらにありました。
よろしければ、参考情報としてご参照ください。

Solidity
function callSomething public {
  ...
  bytes memory someBytes; // バイト配列
  ...
}

文字列型

string(文字列型)は、その名の通り、文字列を扱うためのものです。ただ、前項でも記載した通り、文字列はバイト列で保有されるので、その実態は、bytesになります。UTF-8でエンコードされた文字列になります(厳密には値型ではありません)。

Solidity
string public uri = "https://token-village.com";

列挙型

enumは、事前に定義された一連の値から選択するためのデータ型です。次のStateという変数は、3つの値を持ちます。実態としては中身は数値で、OPENは0、CLOSEDは1、CANCELDは2です。

Solidity
enum State {
  OPEN,
  CLOSED,
  CANCELED
}

enumを使用すると、特定の値を指定する際にわかりやすく読みやすいコードを記述できます。たとえば、関数の引数や変数の型としてenumを使用することができます。

また、enumは整数値として扱われますので、enumの値を数値として比較したり、算術演算子を使用したりすることもできます。

ご意見をお聞かせください!

web3チュートリアルシリーズについてのご意見を是非お聞かせください。

この記事、または、web3チュートリアル全体について、是非、あなたのご意見をお聞かせください。
アンケートはこちらからご回答いただけます。

無料相談承ります

ITの専門家が無料相談を受け付けます。web3以外のテーマでもOKです。

オンラインでの無料相談を承っています。ご希望の方は、お問い合わせフォームよりご連絡ください。
ITの専門家があなたのご質問にお答えいたします。

Let's share this post !

Author of this article

After joining IBM in 2004, the author gained extensive experience in developing and maintaining distributed systems, primarily web-based, as an engineer and PM. Later, he founded his own company, designing and developing mobile applications and backend services. He is currently leading a Tech team at a venture company specializing in robo-advisory.

Comments

To comment

CAPTCHA


TOC