Section 1.3 変数

前回は今何時何分かを表示するスクリプトを書いたわけだけど…
うん。
前回もちょっと言ったように、Date クラスには、 他にも年、月、日、曜日、秒を取得するメソッドがあるんだ。
まとめるとこんな感じ。

var d = new Date();
System.inform(d.getYear());     // "年"を表示
System.inform(d.getMonth());    // "月"を表示
System.inform(d.getDate());     // "日"を表示
System.inform(d.getDay());      // "曜日"を表示
System.inform(d.getHours());    // "時"を表示
System.inform(d.getMinutes());  // "分"を表示
System.inform(d.getSeconds());  // "秒"を表示

いっぱいあるね〜。
まぁ、確かに数は多いけど、どれもわかりやすいメソッドだと思うよ。
ただ…
ただ?
getMonth メソッドと getDay メソッドはちょっと注意が必要かな。
どうして?
上のスクリプトを実行してみるとわかると思うけど、 getMonth メソッドは実際の月より1小さい数が表示されるし、 getDay メソッドは曜日じゃなくて数字が表示されるんだ。
……あ、ほんとだ。
今2月なのに『1』って表示されたし、 今日は月曜日なのに、これも『1』って表示されたね。
でしょ。だから月は『getMonth() + 1』にしなくちゃいけないんだ。
あと、getDay メソッドは『0, 1, 2, 3, 4, 5, 6』がそれぞれ『日曜日、月曜日、火曜日、水曜日、木曜日、金曜日、土曜日』に対応してるから。
ま、これは仕様だから、そういうもんだって思っといて。
うん、わかった。
あともう一つ。
なに?
Date クラスのメソッドは、1行目の

var d = new Date();

っていうスクリプトが実行された時の時間を教えてくれるから、 例えば 12 時 55 分にこのスクリプトを実行して、曜日のメッセージが表示された状態で5分放っておくと、 時、分の表示は『13 と 0』じゃなくて『12 と 55』になるんだ。
えっ、そうなの?
うん。
Date クラスのメソッドは、そのメソッドを実行したときの時間じゃなくって、 1行目のスクリプトが実行されたとき、つまり d さんを呼び出した時間を教えてくれるんだ。
へぇ、そうなんだ…
そ。だから同じメソッドを何回実行しても、全部同じ結果になるってワケ。
そこんとこちょっと注意しといてね。
はーい。
じゃ、今回は前回のスクリプトをちょっと改良してみるね。
改良って?
前回は、時と分が数字だけで、しかも別々に表示されててわかりにくかったでしょ。
だから、『何年何月何日何時何分何秒』っていう感じに表示してみるの。
ちなみに曜日は数字になってて使いにくいから、今回はパスね。
なるほどね。
うん、りょーかい。
それじゃ、今回は変数を使ってみるね。
変数って、数字とか文字とかを記憶しておく箱みたいなもの…なんだよね?
ん、そう。
KAG スクリプトでも結構よく使われてるよね。
うん。使ったことある。
f.hensuu』みたいな感じに書くんだよね。
ん、そだね。
f.』から始まる変数がセーブすると保存される「ゲーム変数」で、 『sf.』から始まるのがセーブしなくても保存される「システム変数」で、 『tf.』から始まるのがセーブされない「一時変数」なんだよね。
TJS の変数も基本的に使い方は同じ。まぁ、KAG の変数は TJS で書かれてるから当然だけどね。
ただ、TJS の変数は自動的にセーブされたりはしないから、全部一時変数ってことになるかな。
あと、変数を使うときに宣言が必要なんだ。
宣言?
そ。
「これから変数を使いますよ〜」っていう宣言。
そんなの必要なの?
KAG では変数の宣言が必要ないように工夫されてるから、確かに違和感があるかもね。
うん…
TJS の場合は、変数を使いたいときには var っていうキーワードを使って、 こんなふうに宣言するんだ。

<変数の宣言>

var hensuu;

これは、「hensuu っていう名前の変数をここから使いますよ」っていう宣言。
あれ? 変数の名前に『f.』も『sf.』も『tf.』も入ってないよ…?
あー、あれは KAG で使う変数にだけつけるもので、普通の変数にはつけないんだ。
そうなの?
うん。
KAG スクリプトの中で変数の宣言をしなくてもいいようになってる代わりに、 『f.』とか『sf.』とか『tf.』を 変数名の最初につけることになってるの。
へぇ、そうなんだ…。
あ、じゃあどんな名前がつけられるの?
変数の名前には、アルファベットの大文字(A〜Z)、小文字(a〜z)、_ (アンダーバー)、数字、全角文字が使えるよ。
ただし、最初の文字を数字にするのはダメ。 あと、『予約語』っていう特別な意味がある単語も使えないから。

<予約語>

break continue const catch class case
debugger default delete do extends export
enum else function finally false for
global getter goto incontextof Infinity
invalidate instanceof isvalid import int in
if NaN null new octet protected property
private public return real synchronized switch
static setter string super typeof throw
this true try void var while with

予約語が使えないっていう事以外は『f.』とかの後ろにつけられる名前と同じって考えればいいと思うよ。
うん、わかった。
例をあげとくと、こんな感じかな。

<使える名前の例>

var x;
var Flag2;
var _true;         // 予約語が含まれていても予約語そのものでなければOK
var 変数1;         // 全角文字と半角文字を混ぜてもOK
var 2つ目の変数;  // 全角文字なら1文字目が数字でもOK
var a&b;        // 全角文字なら“_”以外の記号を使ってもOK

使えない名前は、例えばこんなの。

<使えない名前の例>

var 1st;   // 最初の文字が数字なので×
var a&b;   // “_”以外の記号が入っているので×
var true;  // 予約語なので×

あ、あと大文字と小文字は区別されるから…

var ab;
var Ab;
var aB;
var AB;

これはそれぞれ別な変数とみなされるよ。
これも KAG の変数と同じだね。
うん。
それと、こんなふうに変数を『,』で区切ると、一度に2個以上の変数を宣言できるんだ。

var a, b, c, d;

これで a, b, c, d っていう4つの変数が1行で宣言できるよ。
うん、わかった〜。
じゃ、getYear メソッドを使って、年の値を変数に代入するスクリプトを書いてみるね。

<年の値を変数に代入するスクリプト>

var d = new Date();
var year;            // これより下のスクリプトで変数 year が使えるようになります
year = d.getYear();  // 年の値を year に代入(セット)

year っていう変数を宣言して、それに getYear メソッドが教えてくれる年の値を代入してるわけね。
今は 2007 年だから、year の中身は『2007』になるよ。
うん、確かに変数の使い方は KAG の変数と同じみたいだね。
あっ、もしかして Date クラスのメソッドが使える d さんも変数なの?
そのとーり!
実は Date クラスのメソッドはオブジェクトっていう変数を作ると使えるようになるんだ。
そうだったんだ〜。
でも、変数の中身って数字か文字っていうイメージがあるから、ちょっとヘンな感じ…
ん〜、確かにそうかもね。
じゃ、次回は TJS の変数に代入できるデータの種類について説明するね。
あれ、今回はここまで?
まだ時刻を表示するスクリプト書いてないよ?
うん。まだ先は長いからね〜。
とりあえず今回はここまで。
じゃ、また次回ね!


前へ | TOP | 次へ