Nobiq
Nobiq

型と変数

値段・状態を記録する、型と変数

前回作った空っぽの自動販売機に、今回は「値段」「営業中かどうか」などの記録を持たせます。

変数 = 名前をつけた記録場所

プログラムの中でなにかを覚えておくには、変数を使います。変数とは「名前をつけた記録場所」です。

自動販売機でいえば、「値段: 120円」「営業中: はい」のように、機械の中に貼ってあるメモだと思ってください。メモには名前(値段)と中身(120)があります。

Solidity で変数を作る書き方はこうです。

型 public 名前 = 中身;

public は「外から誰でも見ていい」という意味です(くわしくは第4回でやります。今はおまじないで OK)。

もうひとつ、=(イコール)に注意してください。算数の「等しい」とは意味が違います。プログラミングの = は「右の中身を、左に入れる(代入する)」という動作です。変数をラベルのついた箱だと思ってください——price = 120 は「price と等しい」ではなく、「price というラベルの箱に、120 を入れる」と読みます。

型 = 中身の種類

とは「その記録場所に、どんな種類の中身を入れるか」の指定です。Solidity は中身の種類にとても厳しく、数字の場所に文字は入れられません。まず 4 つ覚えましょう。

入るもの
uint2560 以上の整数120
boolはい/いいえ(true / falsetrue
string文字"Nobiq Soda"
addressブロックチェーン上の住所0x19b1...(0x で始まる英数字)
  • uint256 の「u」は「マイナスなし」、256 は「とても大きな数まで入る」という意味です。お金や個数は基本これを使います
  • address は、ブロックチェーンの世界の「住所」です。人(ウォレット)にもコントラクトにも、全員にこの住所が割り振られています。今回のハンズオンでデプロイすると、ログに contract=0x... と出ます——あれがまさにこれです

記録つきの自動販売機

4 つの型を全部使うと、こうなります。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

contract VendingMachine {
    uint256 public price = 120;
    bool public isOpen = true;
    string public drinkName = "Nobiq Soda";
    address public owner;
}
  • = 120 のように書くと、最初の中身(初期値)を入れられます
  • owner のように = を書かなければ、「空欄」で始まります(数字なら 0、bool なら false。address は 0x000...0 という「誰でもない住所」)。持ち主の住所は次回、ちゃんと記録します

:::note 状態変数とローカル変数 contract { } の直下に書いた変数は状態変数と呼ばれ、ブロックチェーンに永久に記録されます。自販機に貼ったメモは、機械が街にある限り消えません。一方、あとで出てくる「関数の中だけで使う一時的な変数(ローカル変数)」は、処理が終わると消えます。この区別は第6回でくわしくやります。 :::

今回覚えたこと

  • 変数 = 名前をつけた記録場所。型 public 名前 = 中身; で作る
  • = 中身の種類。まずは uint256(整数)/ bool(はい・いいえ)/ string(文字)/ address(住所)の 4 つ
  • 状態変数はブロックチェーンに永久に記録される

次回は、この記録を**読み書きするボタン(関数)**を付けます。

:::tip Lab でやってみる 上のコードを Lab でコンパイル→デプロイしてみましょう。デプロイ後の実行画面には、public を付けた変数の数だけ「読み取りボタン」が自動で並びます(price() を呼ぶと 120 が返ってきます)。値段や飲み物の名前を変えて、デプロイし直すと結果が変わることも確かめてみてください。操作方法: コントラクトを動かす :::