レッスン 2 では、より一般的な 型、それに関連する 演算 と 値 について学びました。 このレッスンでは、これらの型や値をコードで使用する方法を学びましょう。
式で使用する 値 は 情報 または データ と呼ばれることがあります。 プログラムを動作させるにはデータが必要であり、データまたは値を格納する方法にはさまざまなものがあります。
また、データにもさまざまなタイプがあります。
可変と不変
可変 (mutable) とは、変わることが可能であることを意味します。 英語では、突然変異によって DNA コードが変化した「ミュータント (mutant)」と同じ語源です。
浜辺に打ち寄せる波は、常にその形が変わるため「可変」です。
不変 (immutable) とは、変わることができないことを意味します。 地震や高波、爆発や浸食のことを考えなければ、ビーチ沿いの崖は「不変」であると言えます。
では、可変/不変はどのようにコードに関係するのでしょうか?
プログラムのランタイム時に変更できない値は不変です。 プログラムのランタイム時に外部からの入力に応じて変化する値は可変です。
Verse には、多くのプログラムの実行に必要な基本的演算をサポートするいくつかの 組み込み 型が用意されています。 これらの組み込み型は、Verse で 変数 と 定数 を使用する際の基盤となるものです。
変数と定数
プログラミングでは、変数と定数を使ってプログラムで使用する値を格納します。
プログラムの次の動作を判断するためにデータが必要になると、コンピュータではコード内の変数と定数に格納されたデータに基づいて計算と判断を行います。
変数 という用語は変数と定数を含む総称として使用されることもありますが、重要な違いが 1 つあります。変数はプログラムの実行中にもその値を変えることができますが、プログラムの実行中に 定数値を変更することはできません。 つまり、変数の値は可変であり、定数の値は不変であるとなります。
変数と定数の構文
変数の構文は次のとおりです。
冒頭にある var は、これが変数であることを示しています。
定数の基本的な構文は次のとおりです。
変数と定数の構文における 唯一 の違いは、定数の場合は var が付かず、変数には付くことに留意してください。
この構文を細かく分けると次のようになります。
|
|
| Type は、この変数の値を使って行える動作を示します。 名前と型はコロン (:) で区切ることに留意してください。 |
| 定数の場合、この値は一定のまま維持されます。 変数の場合、値はプログラムの実行中に随時変化する可能性がありますが、これがその最初の値となります。 これが初期値です。 型とその値は 変数の初期値設定は必須ではなく任意ですが、グッドプラクティスとして推奨されます。 定数の場合は値を設定する必要があります。 |
識別子
識別子 は、プログラマーによって式に付けられる 一意の名前 です。
識別子と名前という言葉は同義語です。
命名規則
Verse での名前の付け方にはルールがあります。 変数や定数を作成する場合、次の命名規則に留意してください。
可能な限り、変数 (およびその他の式) の名前は それらの動作を表すもの にする。
グッド プラクティスとして、コードを読みやすくするために変数の名前に一貫性を持たせる。こうすることで、他のデベロッパーがコードを理解しやすくなるだけでなく、自分でも覚えやすくなります。
識別子の最初の文字は、文字またはアンダースコア (_) のいずれかにする。
最初の文字の後には、文字、数字、またはアンダースコアを使用する。 名前には複数のアンダースコアを使用でき、それらを連続して使用することもできます。
変数または定数の識別子にスペースを含めることはできない。
Verse は大文字小文字を区別する。大文字と小文字を統一することが重要です。 統一されていないと、コードにエラーが発生する原因となります。
Verse の命名規則の完全ガイドは、「Verse コード スタイル ガイド」を参照してください。
変数を宣言する
変数または定数は、それぞれ 識別子 (名前)、格納できる値の 型、そして 値 自体の 3 つの基本的要素で構成されています。
var name : type = value
Verse では、変数を宣言することで作成します。 変数を宣言するには、その変数に識別子、型、そして値の 3 つの要素が必要です。
初期化
定数 (または式) に 初期値 を設定することを 初期化 と呼びます。 変数または定数を 宣言する 時に初期化が必要です。
: = 演算子 を使用することで、値を定数または変数に初期化できます。
この演算子を使う際は、名前 を : の前に置き、型 を : と = の間に配置して、値 を = の後に置きます。
var Coins : int = 500
定数を有効活用する
コード内の複数の場所で使用され、変わることのない値については、定数を使用することをお勧めします。
レッスン 2 で学んだリテラルについて覚えていますか? リテラルとは、決して変わることのない値を指します。 リテラルの使用は控えめにすることが理想的です。
たとえば、プレイヤーがゲーム内でネズミ捕り器を 100 コインで購入できるとします。この場合は、プレイヤーがネズミ捕り器を購入した際にコードによってコインからの減算が行われるプログラム内の各部分に、「100」の リテラル (不変) 値を書き込むことができます もしくは、 (より良い方法として、CoinsPerMousetrap などと、100 の値を維持する定数を宣言して使用することもできます)。
CoinsPerMousetrap : int = 100
定数をこのように使用することで、あなただけでなくチーム メンバーにとっても読みやすいコードになり、長い間放置していたコードで作業を行う際などに役立ちます。
説明のないリテラル値ではなく、適切な名前の定数を使用すると、ほかのプログラマーが理解しやすいコードになります。
定数をこのように使用する別のメリットとしては、たとえばネズミ捕り器の値段などの値を変更する場合に、この値が使用されているすべてのインスタンスではなく、この定数のみを更新すれば済む点が挙げられます。
定数にはできるだけわかりやすい名前を付けてください。 上の例では、CoinsPerMousetrap により、プレイヤーがネズミ捕り器を購入するために支払うコイン数の定数が明確に示されています。
変わることのない数値は定数として格納してください。
値を変数に割り当てる
定数と異なり、変数の値は、プログラムの実行中に変更できます。
定数では同じ値を入力する反復作業を省くというメリットがありますが、変数を使用することの利点は何でしょうか?
ときには、他の入力などに基づいて値を変更したい場合があります。
たとえば、プレイヤーがネズミ捕り器を購入した際に、このコード行を使用して、プレイヤーが持つコインの数からネズミ捕り器の値段を差し引きます。
set Coins = Coins - CoinsPerMousetrap
このコード行を詳しく見てみましょう。
最初の部分にある set は Verse に組み込まれた キーワード です。 キーワード set は変数の値を変更する際に使用できます。このコード行では、Coins の値を、Coins から CoinsPerMousetrap を差し引いた値と同じになるように変更することを指示しています。
set を使用した値の変更は変数のみで行うことができます。 set を定数に使用することはできません。
この例にある Coins と CoinsPerMousetrap は、いずれもこのプログラム内にある式の 識別子です。
まとめ
変数と定数はいずれもボット値の格納に使用されます。
これら 2 つの最大の違いは、定数の値はプログラムのランタイム時に変更できないのに対し、変数の値は変更可能な点です。
変数と定数は、それぞれ評価時に結果を生成する式です。
Verse では、変数と定数を宣言します。 宣言するには、式にユニークな名前もしくは識別子、型、値を指定します。
式に初期値を設定する処理は初期化と呼ばれます。