今回は前回の続き、TJS の変数に代入できるデータ型について。 | |
データ型って、数字とか文字とかそういうの? | |
そうそう。 TJS の変数はこういうデータ型を扱えるんだ。 |
<TJS の変数が扱えるデータ型>
void | 何も表していない(変数の中身が空である)ことを表す |
整数型 | 0, 100, -256 などの整数値 |
実数型 | 0.1, -123.456 などの小数を含む数値 |
文字列型 | "abc", "あいうえお" などの文字列 |
オブジェクト型 | new 演算子で確保したオブジェクト、関数、クラス、プロパティオブジェクトなど |
オクテット列型 | バイナリデータを扱うための型 |
なんか初めて見るのが結構あるね。 | |
TJS の変数は色んなデータを扱えるからね。 じゃ、まずは void から。 |
|
ヴォイド? | |
void ってのは、「何も表していない」ってこと。 変数の値が void の場合は「変数の中身に何も入ってないよ」って意味。 変数を箱にたとえると、箱が空っぽの状態ってことだね。 |
|
それって 0 ってこと? | |
ううん。そうじゃないよ。 0 っていうのは箱の中に『0』っていう数字が入ってる状態のことだけど、 void ってのは数字でも文字でもない何にもない状態。 例えば、宣言した後何も代入されてない変数は、何も値を持ってないから void なんだ。 |
|
う〜ん、わかったようなわかんないような… | |
まぁ、今はそんなに深く考えなくても大丈夫。 とりあえず、変数にはそういう状態があるっていう程度に考えといて。 |
|
うん、わかった。 | |
次は整数型。 これはお馴染みのデータ型だよね。 |
|
うん。 0, 1, 2, 3, …っていう数値だよね。 あ、あとマイナスもあるよね。-1, -2, -3, …って感じで。 |
|
ん、そう。 ちなみに TJS では -922京3372兆368億5477万5808 から 922京3372兆368億5477万5807 の範囲の数値が使えるんだ。 |
|
そ…そんなに!? | |
うん。だから整数の計算ならほとんどの計算ができるんじゃないかな。 | |
そりゃこれだけ範囲が広かったらどんな計算でもできそうだよね… | |
次は実数型。 これは整数型を拡張して小数も扱えるようにした型、って感じかな。 |
|
0.01 とか -1.234 みたいに小数点がつく数値が使えるってことだよね? | |
ん、そうそう。 あと、実数型は 1000000000000000000000000000000.0 とか 0.000000000000000000000000000001 とかいう、 すごく大きい数値や細かい数値も使えるよ。 |
|
うわ、最初の数字はもう何て読んでいいかもわかんないね… | |
まぁ、こんな数値は普通は使わないだろうけどね。一応こんな数値も扱えるよ、ってことで。 じゃ次は文字列型。これも今までにも何回か使ったからわかるよね。 |
|
うん。 メッセージボックスに文章を表示する時とかに使う文字のデータだよね。 |
|
ん、そう。 文字列型の値は『"』(ダブルクォーテーション)か『'』(シングルクォーテーション)で囲むんだ。 だから… |
上のスクリプトの string1 と string2 の中身は同じになるよ。 | |
なんで2種類あるの? | |
文字列の中にダブルクォーテーションがある時のためじゃないかな。 例えば、『文字列は"ダブルクォーテーション"で囲んでね。』っていう文字列を変数に代入したいときには… |
<これはダメ!>
って書くと『文字列は』ってとこまでが囲まれてて、その後ろが文字列の外に出ちゃってるからエラーになっちゃうんだ。 でも… |
<これはOK!>
って書いた場合は、文字列はシングルクォーテーションに囲まれてるってみなされるからOKってワケ。 あと、逆に |
<これもOK!>
ってのもOK。 | |
なるほどね〜。 | |
あとエスケープ文字を使う方法もあるんだけど、ややこしくなりそうだから説明はパスするね。 じゃ、次はオブジェクト型。 オブジェクト型には色々あるんだけど、複雑だから今回は1つだけ紹介しとくね。 |
|
うん。 | |
Date クラスのメソッドが使える、あの d っていう変数がオブジェクト型の変数なんだ。 | |
そういえば、さっき d も変数だって言ってたもんね。 | |
うん。 TJS ではこういう複雑なデータも変数として扱うことができて、それをオブジェクト型の変数って呼ぶんだ。 |
|
なんか奥が深いね〜。 | |
まぁね。ま、そのうち慣れると思うよ。 で、最後はバイナリデータを扱えるオクテット型なんだけど… これは滅多に使うことないし、今回の時計を作るのにも使わないから、ここではパスするね。 |
|
あ、そうなの? | |
うん。 詳しく知りたい場合は TJS2 リファレンスの『オクテット列に対する操作』の項目を見てね。 |
|
うん、りょーかい。 | |
これでデータ型の説明は一通り終わったから、 次は『何年何月何日何時何分何秒』の形式で今の時間を表示するスクリプトを書いていこ。 | |
あ、そういえばそれが目標だったよね。 ここまで長かったから忘れちゃってた… |
|
それじゃ、変数に年、月、日、時、分、秒を代入するスクリプトを書いてみて。 | |
え、わたしが書くの!? | |
うん。代入するところまでなら、今回の内容が解ってればできるから。 とりあえずやってみて。 |
|
わかった。やってみる! え〜っと、年の値を変数に代入するところまでは前回やったから… |
ここまではこれでいいんだよね? | |
ん、OKだよ。 あ、こういう場合は… |
こうすると year が年の値で初期化されるから、 結果的には宣言してから代入するのと同じになるんだ。 | |
あ、そういえば d の方はそうやって宣言してるもんね。 じゃあ、この後はこのやり方で書いてくね。 |
|
ん。 | |
えっと、次は月だから…変数名は month にして… |
こうだよね。 | |
これじゃダメだよ。 | |
えっ、なんで!? | |
ほら、前に言ったじゃない。 getMonth は実際の月より1小さい値になるから… |
|
あ、そっか! 1足さなくちゃいけないんだ! |
|
ん、そういうこと。 | |
ってことは… |
これでいいのかな? | |
ん、これでOK。 | |
あとはそのままでよかったハズだから… |
これでどう? | |
うん、完璧! | |
やった、ちゃんと書けた〜! | |
じゃ、後はこの変数を使って『何年何月何日何時何分何秒』の形式で表示するよ。 | |
それってどうやるの? | |
『文字列の足し算』をやるんだ。 | |
えっ、文字列って足し算できるの? | |
うん、数字の足し算と同じように『+』を使って足し算できるよ。 まぁ、足し算って言うより連結って感じだけどね。 試しにこのスクリプト実行してみて。 |
|
うん。 |
<文字列の足し算>
あっ、ほんとだ! 『1』と『月』がつながって『1月』って表示された! |
|
これを使って『何年何月何日何時何分何秒』っていう文字列が作れるんだ。 例えば『何年』っていうのはこんな感じ。 |
うん、ちゃんと『2007年』って表示されたよ! | |
じゃ、ここで一つ質問。 | |
な、なに…? | |
year っていう変数のデータ型は何だと思う? | |
え? えっと… getYear メソッドが教えてくれる年の値を year に代入してるんだから、
year は 2007 だよね。 ってことは…整数型? |
|
ん、正解。 | |
よかった、合ってた。 | |
でも、year が整数型だと、3行目の足し算ってちょっとヘンだと思わない? | |
えっ? 別に普通の足し算じゃ…… あっ! "年" は文字列だから、数字と文字列を足し算してるの!? |
|
そう、それ。 | |
確かにヘンだよね…… でもちゃんと『2007年』って表示されてるし……どうなってるの? |
|
実は、足し算する値に数値と文字列が両方入ってる場合は、数値が自動的に文字列に変換されるんだ。 つまり… |
っていう足し算をやってるのと同じことになるんだ。 だから message には "2007" っていう文字列と "年" っていう文字列が連結された "2007年" っていう文字列が代入されるってワケ。 |
|
へぇ、そうなんだ。 | |
TJS の足し算では、こんなふうにデータ型が違ってても、自動的にデータ型をうまく変換してくれるから、 データ型をそれほど気にしなくてもちゃんと計算できるようになってるんだ。 | |
便利なんだねぇ。 | |
うん。 じゃ、続きやってみて。 |
|
おっけー! あ、その前にちょっと聞きたいんだけど…こんなふうに続けて書いても大丈夫? |
ん、だいじょぶだよ。 この場合もちゃんと year と month が両方とも文字列に変換されるから。 |
|
それなら… |
これでどうかなぁ…? | |
じゃ、実行してみよっか。 | |
う、うん… なんか緊張する… |
<実行結果>
わ〜っ、ちゃんと表示されたよ〜! | |
うん、ばっちりだね! | |
今回はがんばったもん。 | |
ん、じゃ次回もその調子でね。 | |
うん、次回もがんばるよ〜! |