値の型について確認する

完了

このユニットでは、Solidity の主要な値の型について説明します。 値型は値で渡され、使用時にコピーされます。 コントラクトを記述するときに使用する主な値の型には、整数ブール値string literalアドレス列挙型があります。

整数

整数は、すべての Solidity ソース ファイルで使用されます。 これらは整数を表し、符号付きまたは符号なしにすることができます。 ストレージのサイズは 8 ビットから 256 ビットまでの整数です。

  • 符号付き: 負および正の数値が含まれます。 int として表すことができます。
  • 符号なし: 正の数値のみが含まれます。 uint として表すことができます。

ビット数が指定されていない場合、既定値は 256 ビットになります。

整数に適用できる演算は次のとおりです。

  • 比較: <=<==!=, >=, >
  • ビット演算子: & (and)| (or)^ (bitwise exclusive)~ (bitwise negation)
  • 算術演算子: + (addition)- (subtraction)* (multiplication)/ (division)% (modulo)** (exponential)

次に、整数定義の例をいくつか示します。

int32 price = 25; // signed 32 bit integer
uint256 balance = 1000; // unsigned 256 bit integer

balance - price; // 975
2 * price; // 50
price % 2; // 1

ブール値

ブール値は、キーワード bool を使用して定義されます。 これらは常に、true または false のいずれかの値になります。

これらの定義方法を次に示します。

bool forSale; //true if an item is for sale
bool purchased; //true if an item has been purchased

ブール値は、比較ステートメントでよく使用されます。 次に例を示します。

if(balance > 0 & balance > price) {
    return true;
}

if(price > balance) {
    return false;
}

ブール値は、関数のパラメーターと戻り値の型でも使用できます。

function buy(int price) returns (bool success) {
    // ...
}

文字列リテラル

String literals は、ほとんどのコントラクト ファイルにも使われています。 これらは、二重または単一引用符で囲まれた文字または単語です。

    String shipped = "shipped"; // shipped
    String delivered = 'delivered'; // delivered
    String newItem = "newItem"; // newItem

さらに、次のエスケープ文字を string literals と共に使用できます。

  • \<newline> 改行のエスケープ
  • \n 改行
  • \r 復帰 (キャリッジ リターン)
  • \t タブ

Address

アドレスは、Ethereum ユーザー アカウントを表す 20 バイトの値を持つ型です。 この型は、通常の address か、address payable にすることができます。

2 つの違いは、address payable 型は Ether の送信先にすることができるアドレスであり、transfer および send という追加メンバーが含まれていることです。

address payable public seller; // account for the seller
address payable public buyer; // account for the user

function transfer(address buyer, uint price) {
    buyer.transfer(price); // the transfer member transfers the price of the item
}

列挙型

Solidity では、列挙型を使用してユーザー定義型を作成できます。 どのような値を含めるかはコントラクトを作成するユーザーが決定するため、ユーザー定義と呼ばれます。 列挙型を使用して、選択可能な多くの選択肢を提示できます。その 1 つが必須です。

たとえば、列挙型を使用して、項目のさまざまな状態を示すことができます。 列挙型は、すべての値が事前に定義されていて 1 つを選択する必要がある、複数選択の回答を表すものと考えることができます。 列挙型は、コントラクトまたはライブラリ定義内で宣言できます。

enum Status { 
    Pending,
    Shipped,
    Delivered 
}

Status public status;

constructor() public {
    status = Status.Pending;
}