前提条件:learn-code-basics-2-basic-programming-components-in-verse
レッスン 2 では、より一般的な 型、それに関連する 演算 と 値 について学びました。このレッスンでは、これらの型や値をコードで使用する方法を学びましょう。
式で使用する 値 は 情報 または データ と呼ばれることがあります。プログラムを動作させるにはデータが必要であり、データまたは値を格納する方法にはさまざまなものがあります。
また、データにもさまざまなタイプがあります。
可変と不変
可変 (mutable) とは、変わることが可能であることを意味します。英語では、突然変異によって DNA コードが変化した「ミュータント (mutant)」と同じ語源です。
浜辺に打ち寄せる波は、常にその形が変わるため「可変」です。

不変 (immutable) とは、変わることができないことを意味します。地震や高波、爆発や浸食のことを考えなければ、ビーチ沿いの崖は「不変」であると言えます。

では、可変/不変はどのようにコードに関係するのでしょうか?
プログラムのランタイム時に変更できない値は 不変 です。プログラムのランタイム時に外部からの入力に応じて変化する値は 可変 です。
Verse には、多くのプログラムの実行に必要な基本的演算をサポートするいくつかの 組み込み 型が用意されています。これらの組み込み型は、Verse で 変数 と 定数 を使用する際の基盤となるものです。
変数と定数
プログラミングでは、変数 と 定数 を使ってプログラムで使用する値を格納します。
プログラムの次の動作を判断するためにデータが必要になると、コンピュータではコード内の変数と定数に格納されたデータに基づいて計算と判断を行います。
変数 という用語は変数と定数を含む総称として使用されることもありますが、重要な違いが 1 つあります。変数はプログラムの実行中にもその値を変えることができますが、プログラムの実行中に 定数値を変更することはできません。つまり、変数の値は可変であり、定数の値は不変である となります。
変数と定数の構文
変数 の構文は次のとおりです。

冒頭にある var
は、これが変数であることを示しています。
定数 の基本構文は次のとおりです。

変数と定数の構文における 唯一 の違いは、定数の場合は var
が付かず、変数の場合は var
が付くことである点に留意してください。
この構文を細かく分けると次のようになります。
name |
|
type |
型 はこの変数の値を使って行える動作を示します。 名前と型はコロン (:) で区切ることに留意してください。 |
value |
定数の場合、この値は一定のまま維持されます。変数の場合、値はプログラムの実行中に随時変化する可能性がありますが、これがその最初の値となります。これが 初期値 です。 型とその値は 変数の初期値設定は必須ではなく任意ですが、グッドプラクティスとして推奨されます。 定数の場合は値を設定する必要があります。 |
識別子
識別子 は、プログラマーによって式に付けられる 一意の名前 です。
識別子 と 名前 は同義の語です。
命名規則
Verse での名前の付け方にはルールがあります。 変数や定数を作成する場合、次の命名規則に留意してください。
- 可能な限り、変数 (およびその他の式) の名前は それらの動作を表すもの にします。
- コードを読みやすくするために、変数の名前に一貫性を持たせるのがグッド プラクティスです。こうすることで、他のデベロッパーがコードを理解しやすくなるだけでなく、自分でも覚えやすくなります。
- 識別子の最初の文字は、文字またはアンダースコア (_) のいずれかにします。
- 最初の文字の後には、文字、数字、またはアンダースコアを使用します。名前には複数のアンダースコアを使用でき、それらを連続して使用することもできます。
- 変数または定数の識別子にスペースを含めることはできません。
- Verse は大文字と小文字を区別します。大文字と小文字を統一することが重要です。統一されていないと、コードにエラーが発生する原因となります。
Verse の命名規則の完全ガイドは、「Verse コード スタイル ガイド」を参照してください。
変数を宣言する
変数または定数は、それぞれ 識別子 (名前)、格納できる値の 型、そして 値 自体の 3 つの基本的要素で構成されています。
var name : type = value

Verse では、変数を 宣言 することで作成します。変数を宣言するには、その変数に識別子、型、そして値の 3 つの要素が必要です。
初期化
定数 (または式) に 初期値 を設定することを 初期化 と呼びます。変数または定数を 宣言する ときに初期化が必要です。
: =
演算子 を使用することで、値を定数または変数に初期化できます。
この演算子を使う際は、名前 を :
の前に置き、型 を :
と =
の間に配置して、値 を =
の後に置きます。
var Coins : int = 500
定数を有効活用する
コード内の複数の場所で使用され、変わることのない値については、定数を使用することをお勧めします。
レッスン 2 で学んだリテラルについて覚えていますか?リテラルとは、決して変わることのない値を指します。リテラルの使用は控えめにすることが理想的です。
たとえば、プレイヤーがゲーム内でネズミ捕り器を 100 コインで購入できるとします。この場合は、プレイヤーがネズミ捕り器を購入した際にコードによって Coins
からの減算が行われるプログラム内の各部分に、「100」の リテラル (不変) 値を書き込むことができます。または (より良い方法として)、CoinsPerMousetrap
などと、100 の値を維持する定数を宣言して使用することもできます。
CoinsPerMousetrap : int = 100

定数をこのように使用することで、あなただけでなくチーム メンバーにとっても読みやすいコードになり、長い間放置していたコードで作業を行う際などに役立ちます。
また、説明のないリテラル値ではなく 適切な名前が付いた定数 を使用することで、ほかのプログラマーにも理解してもらいやすいコードにできます。
定数をこのように使用する別のメリットとしては、たとえばネズミ捕り器の値段などの値を変更する場合に、この値が使用されているすべてのインスタンスではなく、この定数のみを更新すれば済む点が挙げられます。
定数にはできるだけわかりやすい名前を付けてください。上の例では、CoinsPerMousetrap
により、プレイヤーがネズミ捕り器を購入するために支払うコイン数の定数が明確に示されています。
変わることのない数値は定数として格納してください。
値を変数に割り当てる
定数と異なり、変数の値は、プログラムの実行中に変更できます。
定数では同じ値を入力する反復作業を省くというメリットがありますが、変数を使用することの利点は何でしょうか?
ときには、他の入力などに基づいて値を変更したい場合があります。
たとえば、プレイヤーがネズミ捕り器を購入した際に、このコード行を使用して、プレイヤーが持つコインの数からネズミ捕り器の値段を差し引きます。
set Coins = Coins - CoinsPerMousetrap

このコード行を詳しく見てみましょう。
最初の部分にある set
は Verse に組み込まれた キーワード です。キーワード set
は変数の値を変更する際に使用できます。つまりこのコードの行は、Coins
から CoinsPerMousetrap
を引いた値と等しくなるように Coins
を変更できることを意味しています。
set
を使用した値の変更は変数のみで行うことができます。set
を定数に使用することはできません。
この例にある Coins
と CoinsPerMousetrap
は、いずれもこのプログラム内にある 式 の 識別子 です。
サマリ
- 変数 と 定数 はいずれも 値の格納 に使用されます。
- これら 2 つの最大の違いは、定数の値はプログラムのランタイム時に変更できないのに対し、変数の値は変更可能な点です。
- 変数と定数は、それぞれ 評価 時に 結果を生成する 式です。
- Verse では、変数と定数を 宣言 します。宣言するには、式に一意の名前または 識別子、型、値 を指定します。
- 式に初期値を設定する処理は 初期化 と呼ばれます。