Section 1.5 入力を受け取る

ここまでで今の時間を表示できるようになったね。
うん、もうばっちりだよ!
じゃ今回はさらにレベルアップするよ〜。
おっけー!
§0.3 で時計にアラームをつけるって言ったよね。
うん。
今回はそのための準備をするから。
準備って…どんな?
アラームは『何分後に鳴らす』っていう設定の仕方にしようと思うんだ。
で、今回はその準備ってことで、まず文字を入力できるウィンドウを表示して、そこに入力された数が例えば100だったとすると、 今から100分後の時間を計算して表示するスクリプトを書くの。
えっと…それってなんかレベルアップし過ぎのような気がするんだけど…
そんなことないって。
文字を入力できるウィンドウはメソッドを使って表示できるし、100分後の計算とかも普通の算数だしね。
そうかなぁ…
大丈夫大丈夫。じゃ、まずは文字を入力できるウィンドウの表示からね。
これは System クラスの inputString っていうメソッドを使うんだ。
こんな感じにね。

<入力を受け取ってその内容を表示するスクリプト>

var message = System.inputString("inputStringメソッドのテスト""数字を入力してください。""");
System.inform(message, "入力された値");

じゃ、まずは実行してみよっか。
うん。

<実行結果その1>

文字を入力できるウィンドウ

あ、このウィンドウ見たことあるよ!
えっと、確か KAG の input タグでもこんな感じのウィンドウが表示されて、 name 属性に指定した変数に入力した文字列がセットされるんだよ。
ん、これはそれと同じウィンドウ。
KAG の input タグも、内部ではこの inputString メソッドを使ってるんだ。
あ、そうなんだ〜。
どうりでよく似てると思った。
じゃ、何か入力して OK ボタン押してみて。
あ、普通はどんな文字列でもいいんだけど、今回は数値を取得するのが目的だから、数字にしといてね。
うん。
じゃあ、『100』って入力して、OK。

<実行結果その2>

入力した値が表示されたメッセージボックス

うん。ちゃんと『100』って表示されたね。
ん、OK。
じゃ、inputString メソッドの使い方を説明するね。
はーい。
まず、inputString メソッドに渡すデータは3種類あるんだ。
で、このメソッドに渡すデータのことを引数って言うの。
ひきすう?
そ。KAG のタグでいうところの属性値みたいなもの。
あ、確かに属性の値もタグに渡すデータだもんね。
うん。ただ、属性値と違うのは、引数の名前を書かなくてもいい代わりに、指定する順番が決まってることと、 引数はスペースじゃなくて『,』で区切ること。
で、inputString メソッドの3つの引数はそれぞれこうなってるよ。

inputString メソッドの引数>
第1引数ウィンドウのタイトル
第2引数文字を入力するボックスの上に表示する文章
第3引数文字を入力するボックスにあらかじめ表示しておく文字列

引数は左から第1、第2…って数えるから、第1引数っていうのは左側にある引数のことで、 第2引数は真ん中の引数、第3引数は右側にある引数のことね。
ってことは…第1引数が "inputStringメソッドのテスト" だから、 これがウィンドウのタイトルに表示されてて、第2引数が "数字を入力してください。" だから、 これはその下に表示されてるんだね。
えっと、第3引数の "" っていうのは?
これは空文字列っていって、見ての通り文字が1つもないんだけど、これもちゃんとした文字列なんだ。
今回は文字を入力するボックスにあらかじめ何も表示する必要がないんだけど、 第3引数には文字列を指定しなくちゃいけないから、空文字列を指定することで何も表示されないようにしてるの。
なるほどね〜。
あ、それと、今回は inform メソッドの引数が2つあるんだけど、 inform メソッドの引数って1つだったはずだよね?
今までは1つだけ指定してたけど、本当は inform メソッドの引数は2つあるんだ。
えっ、そうなの?
うん。
ちなみに第2引数はメッセージボックスのタイトルだよ。
あ、ほんとだ。
今までは『Information』って表示されてたけど、今回は『入力された値』って表示されてるね。
なんで引数を1つしか指定してないのにちゃんとメッセージボックスが表示されてたかっていうと、 メソッドの引数には『省略可能』なものがあるからなんだ。
省略可能…って、もしかして例えば image タグの page 属性を省略すると "fore" だと見なされるっていうのと同じ?
そう、それと同じ。
TJS のメソッドの引数にも KAG のタグの属性値と同じように、省略されるとデフォルトの値が使われるものがあるんだ。
じゃあ inform メソッドの第2引数を省略すると "Information" だと見なされるってこと?
ん、そういうこと。
それじゃ、これで入力された値を受け取れるようになったから、次のステップに進むね。
次のステップって、100分後とかの時間を計算するってこと?
そ。
と、その前に一つ問題出すから、答えてみてね。
う、うん。わかった。
このスクリプトを実行して、さっきと同じように『100』って入力して OK ボタンを押すと、何が表示されると思う?

var value = System.inputString("inputStringメソッドのテスト""数字を入力してください。""");
var plus1 = value + 1;
System.inform(plus1);

えっとぉ…『100』って入力するんだから、value には 100 が代入されるよね。
それから、value に 1 を足した値が plus1 に代入されて、 それを表示するんだから…『101』だね。
じゃ、実際にやってみよっか。
うん。

<実行結果>

実行の結果表示されたメッセージボックス

えっ、『1001』!?
なんで??
さて、なんででしょー?
前回の足し算を思い出してみれば判ると思うよ。
あっ! もしかして value が文字列になってて、 『100 + 1 = 101』じゃなくて、 『"100" + "1" = "1001"』になっちゃったの!?
そう、その通り!
inputString メソッドは入力された値が数字でも、それを文字列とみなすんだ。
だから、value は文字列型の変数になって…
value + 1』が文字列+数値になるから、『1』が文字列に変換されて、 plus1 も文字列型の変数になるってこと?
ん、そう。
だから、100分後の時間を計算するためには、value を整数型にしなくちゃいけないってこと。
そんなことできるの?
もちろん。
できなかったらこの話ここで終わっちゃうからね。
あ、そっか。
文字列型の変数を整数型に変換するためには、ある演算子を使うんだ。
えんざんし?
というわけで、次回は演算子について。
あ、次回に続くんだ…


前へ | TOP | 次へ