値の型について確認する
このユニットでは、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;
}