Section 1.7 入力を受け取る(その2)

今回は、まず §1.5で書いたスクリプトを修正して、入力された文字列を数値として扱えるようにするね。
inputString メソッドは数値を入力しても文字列だと見なしちゃうから、valueplus1 が文字列型になっちゃうんだよね。
そう。
でも §1.6 で文字列を数値に変換する方法がわかったわけだから、valueplus1 を整数型にできるよね。
うん。
単項 + 演算子を使って、文字列を数値に変換するんだよね。
ん、そうそう。
じゃ、スクリプトを書き直してみよっか。
え〜っと… value を整数型に変換すれば、plus1 も整数型になるはずだから…

<入力を数値として扱えるようにしたスクリプト>

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

こんな感じかな。
じゃ、実行してみるね。
ん。

<実行結果>

表示されたメッセージ

うん、今度はちゃんと『101』になったよ!
これでOKだね。
ちなみに、上のスクリプトはもうちょっと簡単に書けるんだ。
こんなふうに。

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

+ 演算子ってメソッドに直接つけちゃってもいいの?
うん。
100』って入力して OK ボタンを押すと、 inputString メソッドのところは "100" に置き換わって…

var value = +"100";
var plus1 = value + 1;
System.inform(plus1);

っていうスクリプトと同じになるからね。
あ、そっか。確かにちゃんと 101 になるね。
じゃ、次は今の時刻から 100 分後の時間を計算するスクリプトね。
はーい。
ただ、22 時 20 分以降だと、100 分後には日付が変わっちゃうわけだけど、 1 日後の日付を計算するのはちょっと面倒だから、今回は日付の計算はパスするね。
つまり、22 時 20 分の 100 分後は単に 0 時 0 分ってことにして、日付は考えないから。
うん、りょーかい。
じゃあ、まずは今の時間を取得するスクリプトから。
これは §1.4 でやってるから大丈夫だよね。
うん、大丈夫だよ。
あ、あと今回は時と分だけでいいからね。
わかった。
だったら…

<今の時・分を取得するスクリプト>

var d = new Date();
var hour = d.getHours();       // 時の値を取得します
var minute = d.getMinutes();   // 分の値を取得します

これでいいよね?
ん、OK。
じゃあ、今の時間から 100 分後を計算するスクリプトを書いてみるね。

<今から 100 分後の時・分を表示するスクリプト>

var d = new Date();
var hour = d.getHours();
var minute = d.getMinutes() + 100;
hour += minute \ 60;
minute %= 60;  
hour %= 24;  
System.inform("今から 100 分後は " + hour + " 時 " + minute + " 分です。");

う〜ん、使われてる演算子は §1.6 で出てきたのばっかりだけど、 どうやって 100 分後の時間を計算してるのかよくわかんない…
それじゃ説明していくね。
うん。
まず、1〜3行目はわかるよね。
3行目で分の値に 100 を足してるだけだよね。
ん、そう。
で、分の値に 100 を足すわけだから、当然、分の値は 60 以上になるよね。
うん、そだね。
例えば、今が 30 分だったとしたら、100 分足すと 130 分になるよね。
130 分ってのは 2 時間 10 分のことだから、 minute を 10 にして、hour には 2 を足せばいいわけだよね。
うん、確かにそうなるね。
じゃあ、130 分を 2 時間と 10 分に分解するためには、どうすればいいと思う?
えっと… 1 時間は 60 分だから、分の値を 60 で割ればいいのかな…?
その結果は?
130 ÷ 60 だから、2 余り 10 だね。
これで分解できたよ。
じゃ、それを TJS の式で書いてみて。
えっとぉ…割り算の商を計算するのが \ 演算子で、 余りを計算するのが % 演算子だから…

minute \ 60;  // これが商(minute が 130 なら 2 になります)
minute % 60;  // これが余り(minute が 130 なら 10 になります)

こんな感じかな。
ん、そうそう。
じゃ、後は hour に商の値を足して、minute の値は余りにすればいいよね。
ってことは…

hour = hour + minute \ 60;  // hour に商を足す
minute = minute % 60;       // minute は余りにする

こうかな。
うん、OK。
後は、hour の値が 24 以上になっちゃうかもしれないから、 分の時と同じ考え方で、hour も 24 で割った余りにすればいいよね。
うん、そだね。
じゃあ…

hour = hour + minute \ 60;  // hour に商を足す
minute = minute % 60;       // minute は余りにする
hour = hour % 24;           // hour も余りにする

こうだよね?
ん、じゃ最後に、代入演算子を使ってこのスクリプトを書き換えてみて。
えっと、代入演算子を使うと += とか %= になるから…

hour += minute \ 60;  // hour に商を足す
minute %= 60;         // minute は余りにする
hour %= 24;           // hour も余りにする

はい、これで完成!
えっ? …あ、ほんとだ。4〜6行目と同じスクリプトになってる!
んじゃ実行してみよっか。
うん!

<実行結果>

100分後の時刻表示(0時32分と表示されている)

えっと、今は 22 時 52 分だから、100 分足すと……
うん、ちゃんと 0 時 32 分になってるね!
じゃあ次は『100分』のところを、inputString メソッドで入力された値を使うようにしてみて。
『100』になってるところを inputString メソッドで取得した値に変えればできるよね。
うん、じゃやってみるね。

<入力を受け取れるようにしたスクリプト>

var value = +System.inputString("何分後?""数字を入力してください。""");
var d = new Date();
var hour = d.getHours();
var minute = d.getMinutes() + value;
hour += minute \ 60;
minute %= 60;  
hour %= 24;  
System.inform("今から " + value + " 分後は " + hour + " 時 " + minute + " 分です。");

できたよ。
実行してみてもいいかな…?
ん、やってみて。
じゃあ、今度は 200 分後にしてみるね。

数値の入力画面

これで OK、と。

<実行結果>

200分後の時刻表示

えっと、今 23 時 8 分で、200 分後は 3 時間 20 分後だから… 2 時 28 分だよね。
表示もちゃんと 2 時 28 分になってるよ!
うん、スクリプトもこれでOK!
今回はちょっと長くなっちゃったけど、これで §1.5 の目標達成だね。
うんっ!
じゃ、今回はここまで。
次回はまた新しいことに挑戦するよ。
は〜い!
それじゃ、また次回ね!


前へ | TOP | 次へ