- []
- [以前のリビジョン]
変数と配列と辞書配列
変数とは
さて、生のデータ(即値)や演算した結果は、式を評価し終わるとすぐに消去されます。
すべての演算結果を記憶しておくなんてしていたら、性能の上がった現代のコンピュータでもすぐにメモリ不足になってしまいます。そこで、基本的には使い終わったら消去し、記憶するようにプログラムしたものだけ覚えておくようになっています。
この記憶するための場所を変数といいます。
よく値を入れておくための箱にたとえられます。
変数の宣言
変数は使い始める前に宣言を行う必要があります。
var a; var b, c;
変数の宣言にはvarキーワードを使います。1行目では変数aを使うことを宣言しています。2行目では変数bと変数cを一緒に宣言しています。
宣言せずに変数を使うと、dというものが見当たりません。といったようなエラーが起こります。
値の代入
変数に値を格納することを代入といいます。
var a; a = 3; a = "abc" + "de" + 123;
変数に代入するときは、代入演算子であるイコール記号を使います。
数学のように、「a - 2 = 3 + 4」といった式は書けません。必ず、「変数名=演算式」の形で記述してください。
また、代入を何度行っても構いませんが、その度に前のデータは上書きされます。
値の参照
変数にどんな値が格納されているか確認することを参照といいます。
var a; a = 3; a + 2 + "abc"; // => "5abc"
参照は、演算などの処理の対象となったときに行われます。直接、変数名を記入するだけで構いません。
- TJS2リファレンス - 変数
配列
変数は1つのデータを格納できる箱のようなものでした。
対して配列とは、箱がずらーっと並んだようなイメージのもので、数字で管理しています。
駅などにあるコインロッカーや、個々人用の家がたくさんあるマンションみたいなものでたとえる場合、コインロッカーやマンション全体が配列です。配列はたくさんの変数をもっています。たとえでいうのならば、1つ1つのロッカーや、個人個人の家ですね。
配列の中にある、変数と同じ役割があるものを配列の要素といいます。また、何番目の要素といったときに使う数値を添え字といいます。添え字は0, 1, 2, 3...をとります。
var a; a = new Array(); a[0] = 3; a[1] = a[0] + 2; // 3 + 2
配列自体を入れるための変数を宣言して、新しい配列を代入します。変数にいれるデータは、数値型でも文字列型でもない、オブジェクト型の形式です。数値などにくらべて複雑なモノ全般のデータ型です。
配列の要素にアクセス(代入、参照)するときは、「配列名[整数]」と記述します。そうすると、「配列名[整数]」で1つの変数のように扱えます。
変数と違い宣言する必要はありません。初めて代入や参照を行う要素でも、そのまま使うことができます。逆にvarキーワードを使ったらエラーが発生します。
詳しくは配列のページで説明します。
辞書配列
辞書配列とは配列とは違い、数値ではなく文字列で管理するものです。
その名のとおり、辞書のように単語ごとに詳しいデータが記録されているイメージです。ただし、本物の辞書とは違い、ABC順などに並んでいないので、順番を保持したり並べ替えたりといった用途では使えません。
var d = new Dictionary(); d["key"] = 123; d.key2 = d.key + "4"; // 123 + "4"
配列では大カッコ記号を使ってアクセスしていましたが、辞書配列の場合、大カッコ記号を用いる方法とドット記号を用いる方法の2種類あります。どちらでも結果は同じになります。
ただし、大カッコ内は文字列の形式で記述し、ドット記号の後ろは引用符記号など用いずに直接記述します。
配列と同様に、各要素にアクセスするときにはvarキーワードを使った宣言は必要ありません。
詳しくは辞書配列のページで説明します。
KAGの変数
辞書配列の項でピンときた方もいるかと思いますが、KAGシステムで使えるシステム変数やゲーム変数は、辞書配列です。
sf.a = -2; f["b"] = 2; tf.c = "abc";
システム変数(sf)はそのゲームの起動時に読み込まれ、終了時に保存される変数。ゲーム変数(f)は栞ごと個別でセーブされる変数。一時変数(tf)はファイルには保存されない変数です。
あらかじめ、ユーザ(ゲーム開発者)が使用できるように用意されたものであるため、できる限りこれらを使うようにしましょう。つまり、ちょっとしたデータの格納の場合でも一時変数を使いましょう。
逆に言えば、KAGシステムからちょっとTJSを使う程度では、varキーワードは使う必要はないということです。
var Layer = 2; // 今の前景レイヤの数
たとえば、こんな風にデータを保存したとしましょう。
大事な大事なデータを上書きして、データを格納できることでしょう。
吉里吉里2として必要なデータ。TJS2として必要なデータ。KAG3システムとして必要なデータなどが、既にたくさん変数がある状態であることに注意してください。どんな変数があるのかご存知で、被らない自信があるのであれば問題ありませんが、辞書配列tfは確実に安全です。
- KAG3リファレンス - 変数を使おう
変数と配列と辞書配列~蛇足
変数の名前
変数は、引用符などで囲まずにそのまま記述します。
そのためvarキーワードやnewキーワードなど、あらかじめ決められたいくつかのキーワードは予約語として使えません。また、数値と区別されなければいけないため、1文字目に数値が使えないなどの決まりごとがあります。
- 使える文字は、アルファベット・数字・アンダーバー記号・いわゆる全角文字
- ただし、数字から始まってはいけない
- 加えて予約語と一致してはいけない
- newWordなど完全一致でなければ大丈夫
一方、辞書配列のキーに制限はありません。ただし、ドット演算子を用いたアクセスの方法だと同様の制限がかかってきます。大カッコ演算子を用いてのアクセスであれば問題なく行えます。また、予約語も使えます。
var d = new Dictionary(); // error // d.1 // d.a+b d["1"] = 1; d["a+b"] = "a" + "b"; d.new = "new";
- KAG3リファレンス - 変数を使おう - 変数として使用可能な名前
- TJS2リファレンス - トークン
- 裸の単語、予約語、識別子
初期化
変数を宣言する際してから、あとで値を代入。と別々の式で演算しなくても、初期値を与えて宣言ということもできます。
var a = 1; var b = 2, c = 3;
このようにします。特別難しくないですね。
「宣言してから代入」を同時にやっているように見えますが、代入と初期化は微妙にニュアンスが異なります。まぁほとんど一緒なんですけどね。
簡単な配列・辞書配列の代入
配列と辞書配列で詳しく例をあげますが、ここでも簡単に紹介しておきます。
var a1 = new Array(); var a2 = []; var d1 = new Dictionary(); var d2 = %[];
記述も簡単なので、よく簡易的な書かれ方がされます。これを見たら、配列と辞書配列を代入しているんですよ。ということです。

