2010年12月5日日曜日

nScript講座 第10回

はい。今回からはターミナルをつくるという方針のもとに
各種関数の解説紹介をしていきたいと思います。
講座は以下からどうぞ。
告知通り、サンプルではなくしました。
以下をみてください

///////////////////////////

switch (cmd) {
case "cal":
t=GetSystemTime();
puts ("~~~~~~~\n");
puts (t["year"]);
puts ("year\n");
puts (t["month"]);
puts ("month\n");
puts (t["day"]);
puts ("day\n");
puts (t["hour"]);
puts ("hour\n");
puts (t["minute"]);
puts ("minute\n");
puts (t["second"]);
puts ("second\n");
puts ("~~~~~~~\n");
}

///////////////////////////

cmd=gets(20);

///////////////////////////

以上二つの内容がターミナルスクリプトの中にあり、それぞれ
にでてくる変数cmdは共通のグローバル変数とします。
上部はswitch構造による処理で、下部はユーザーから取得した
ものをcmdに代入するものにそれぞれなっています。

今回新しく使う関数は、GetSystemTime()です!
この関数はどのような働きかたをするかというと、そのデバイスの
時間の値を取得して、返してくれる働きをします。
今回のスクリプトでは、その返し値をtという変数に代入しているの
ですが、、普通、tに代入できたなら
t=GetSystemTime();
puts(t);
と、こんな感じでいいんじゃないかと思いますよね?
でも実はだめなんです。この変数の中身は一工夫しないと扱うこと
ができないんです。
それが、 puts (t["year"])などの書き方なんです。
ちょっと変数から取り出すときの取り出し方が変ですよね。
全部、t["時間の名前"]として取り出しているのがわかりますか?

このとき、tには時間の値が部屋ごとに分かれてそれぞれ入っています。
その部屋には名前がついていて、例えばaという名前の部屋があったら、
t["a"]とすると取り出すことができるのです。
この考え方を、配列といいます。
配列を使うと一つの変数にわかりやすく何個もの値をいれておくことが
できます。これは関数の返し値として用いやすいですよね。

そして今回、GetSystemTime()では、時間を取得して、そしてそれらを
配列を使って返しているわけです。
で、それを取り出して表示させているのが今回のスクリプトです。

ちなみに、t["文字列"]となっているものと、t[数字]となっているものの
二つが配列にはあって、それぞれ呼び方が違います。
前者を、連想配列と呼び、後者をスカラー配列と呼びます。
スカラー配列は、t[1],t[2],t[3]...という風に、順番に使うという決まりがあります。

解説は以上です。が!
きちんと実行してみた人は気づいていますね?
時間の値がずれているはずです。(日本に住んでればw)
バグではありませんよ。ただわざと間違えてるだけです。

さてここから問題です!
実は、GetSystemTime()をGetLocalTime()に置き換えるだけでこのバグは
直ってしまうのです......が。どのような仕組みか考えてください。
何故、こうすることで直るのか。
何時間ずれているか、ということを参考にしながら考えましょう。
つまりはこれら二つの関数は何の値を取得してくれているのかということです。

※答えは数日後にコメントします。わかったらコメントしておいてください。

今回記事内容が短すぎましたね。実はこれでおしまいです。
短くなる代りに更新がはやくなるといいなあ。
と、思われている方、ご安心ください。前までは試験期間中で
更新が遅れていただけですから。

この程度ではおわりませんよ、このサイトは!w

では、今後とも引き続きよろしくお願いします。


5 コメント:

よつ さんのコメント...

おお!もうこんなに更新が
こちらのBrainもやっとのこさ返ってきたのでためして考えてみます!
関数の件もおかげでできました!
ありがとうございます!

よつ さんのコメント...

あ、これは懐かしの...w
前ブログを見てしまっているので答えは分かってしまって(ry

mikan さんのコメント...

そんな......
前のブログをみているなんて!!
うれしいのにがっかりです←

mikan さんのコメント...

case cal:

case "cal":
に修正いたしました。

mikan さんのコメント...

宿題の答えです。
GetSystemTimeでは、システム時間というものを取得します。
システム時間とは、GMT±0の時間のことです。
普段見ている時間は、日本時間なので、GMT+9に補正されて表示されています。
そして、その補正された時間を取得するのが...GetLocalTime。
もうわかりましたね?

コメントを投稿

Related Posts Plugin for WordPress, Blogger...

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Walgreens Printable Coupons