2012年3月30日金曜日

楽しい!! PSVITAでミニプログラミング。指定日サーチを作ってみました。

今回の記事も、PSVITA(プレイステーション ヴィータ)を懐かしのポケコン的に使って一行プログラミングを楽しむ話について書かせて頂きたいと思います。
ヴィータは、ブラウザのブックマークのところにJavaScriptによるプログラミングを書く事が出来る!!というのは前回までの記事で書かせて頂いた通りですが、これが本当に楽しい。

比喩表現ではなくて、本当に一行でプログラミングしなくてはいけないので、ソースの行頭から行末に大きくカーソルを移動する時に面倒とか、見通しが悪いのでデバッグが異様に大変だったりしますが、それはまぁしゃあない。

それよりもプラスの面。
ヴィータのソフトキーボードと予測入力がなかなか素晴らしく、LRキーによるカーソルの移動が可能な特長もあって、プログラムの入力をやっても、決して悪いものじゃないという大発見がありました。本気でポケコン状態です。


■指定日サーチをヴィータで作ってみました■

というわけで、指定日サーチを作ってみました。
これは、年月日と指定日をカンマで区切って入力すると、「その年月日から指定日後は、一体、何年何月の何曜日」なのか?ヴィータが教えてくれるプログラムです。

指定日をカンマで区切って入力するという仕様は、ちょっと悩みました。
プログラムを書ける長さは、いかんせんブックマークに登録出来るURLの文字数しか無い(はず)上に、入力とデバッグを全部ヴィータだけでやらないといけないため、あまり凝ったコードは書けないわけで、コードを楽にする苦肉の策です。

プログラムは以下のようになります。実際は改行やインデントなしで一行で入力します。また、改行コード「¥r¥n」はヴィータでは本当に¥r¥nと表示されてしまうので、¥記号ではなくキーボードからバックスラッシュを選んで入力します。

ちなみにこのプログラムは、「キャンセル」を押下するまで終わらないように作ってあります。

■プログラムコード■

javascript:
function f(v)
{
   var w=new Array("日","月","火","水","木","金","土");
   var d,i;
   var r=prompt("Playstation Vita指定日サーチ\r\n年,月,日,日数を入力",v);
   if(r==""||r==null||r==undefined)
   {
      return;
   }
   var a=new String(r).split(",");
   if(a.length==4)
   {
      d=new Date(a[0],(a[1]-1),a[2]);
      i=parseInt(a[3],10);
   }
   else
   {
      d=new Date();
      i=parseInt(a[0],10);
   }
   d=new Date(d.getFullYear(),d.getMonth(),(d.getDate()+i));
   alert("ヴィータがお答えします。その日は「 " + d.getFullYear()+"/"+(d.getMonth()+1)+"/"+d.getDate()+"("+w[d.getDay()]+") 」です。");
   f(r);
}
f("2011,12,17,0");


■プログラムの起動メニュー■

プログラムは、言ったら当たり前ですが、ブラウザのブックマークから起動します。前回作った電卓も登録してありますよー。

■プログラムスタート■

年,月,日,日数を入力します。初期値として、ヴィータの発売日である2011,12,17,0(0は当日)が表示されるようになってます。
ヴィータはくどいですが、LRキーで左右にカーソル移動出来るので入力には超強い味方ですよー。
今回は、2011年12月17日から180日後はいつ?というのをヴィータに聞いてみました。
なぜ180日後かっていうと、ヴィータに無料で付いてきた内蔵3G回線の終了日を知りたいからなんです。

結果が表示されました。
なるほど、発売日に購入した私の場合、ヴィータ内蔵3G回線の終了日は6月14日なのかー。めちゃ長いなぁ。
ところで、いちいち画面にヴィータって名前を表示しなくていいじゃん?と思うでしょうけど、せっかくだから、ヴィータの名前出したいものー。つまんないバカがはしゃいでると思ってご容赦下さい・・・。


■日数だけの入力も可能です■

プログラムコードを読めば分かるのですが、日数だけの入力も可能です。その場合は、自動的に基準となる日付は「本日」となります。正確にはヴィータのシステム日付です。

システム日付から指定の日数の年月日が表示されます。



■過去へ遡る入力も可能です■

単純ですが、マイナス入力すると過去の日付も知る事が出来ます。
コードを短くするために入力チェックは一切やっていないので、文字とか入れないように注意です。

過去の日付も大丈夫です。
ちなみに、前回作ったヴィータ電卓と同じく、再帰処理によって前回の画面が再表示されるようになっています。
終了するには「キャンセル」ボタンを押下して頂く事が必要です。
キャンセルで終了したところです。
それにつけても、ヴィータ本体だけでプログラミングが楽しめるようになっているとは・・・。ソニーやるなぁという感じです。
ただし、タイプミスとかしてプログラムが起動しなかった時は、まるで仕事で追い込まれた時・・・ほどじゃないですが(そりゃあそうだ。)そこそこの緊張感が走ります。
えっ、この一行スクリーンでデバッグすんの??というジワーッと来る軽い絶望感。
ヴィータでプログラムする時は、決して一気に入力しようと思わないで、1ステップづつ入力しては動くのを確認する作業を行い、動いたら次を入力するという手順を繰り返した方が結果的に早いと思います。