Part10:数値と日付

穂乃果「ラブライブ!をよく知らないけどここ読んでくれてるみんなに朗報だよっ!」
ことり「私たちμ’sの活動が、2016年1月からNHK Eテレで放送されることになりました~」
海未「これを機会に、私たちの活動に興味を持ってくれる人が増えれば嬉しいです」
ことり「ラブアローシュートの元ネタがわかりますよ♪」
海未「カットで!そこはカットでお願いします!」


海未「さて、JavaScriptには組み込みで用意されているオブジェクトがいくつかあります。今回から何回かに分けて、その紹介をしていきます」

海未「詳しいリファレンスは以下を参照してください。ここでは網羅的な解説はしません。・・・分量も分量ですし」

標準ビルトインオブジェクト

海未「今回はNumberMathDateの3つについて説明します。数値、数学、日付ですね」


Number

穂乃果「数値って、前にやったよね?基本データ型のところで」
海未「はい。そこで扱ったのはリテラルの書き方程度でしたが、Numberオブジェクトというものを利用して便利な処理を行うことができるんです」

1.7976931348623157e+308
5e-324
Infinity
-Infinity

海未「たとえば、一例ですがこのような定数が用意されています」
ことり「これは、何の数字?」
海未「順に、JavaScriptで扱える最大数、最小数、正の無限大、負の無限大です。Infinity-Infinityは、それぞれ正負の無限大を表す特殊な記法です」
ことり「覚えておくのが大変な数字は、定数になってるんだ」
海未「それもありますが、たとえばプログラムのどこかに、数値の最大値は1.7976931348623157e+308であると直接書いていたと考えてみてください」
ことり「え~っと・・・何か困るのかな?」
海未「今後処理系がバージョンアップして、扱える数値の範囲が拡張されたと考えてください」
ことり「・・・あっ、書き直さなきゃ」
海未「そうならないためにも、常にNumber.MAX_VALUEのような定数を使用するのがよい習慣です」

海未「定数だけではなく、いくつかのメソッドも用意されています」

海未「isIntegerは値が整数かどうか判定するもの、parseIntparseFloatは文字列で表された数字を数値に変換するものです」
穂乃果「へえ、こういうのは自分で計算しなくてもいいんだね。parseIntの第二引数って何?」
海未「基数です。この場合、252を10進数と見なして変換するという意味ですね」
穂乃果「じゃあ252を8進数として変換とかもできちゃうんだ」
海未「できますが、この基数を指定する理由はどちらかというと、桁合わせのために0埋めされた”00252″みたいな文字列をちゃんと10進数で解釈するためというのが多いですね」
穂乃果「0で始まると?」
海未「古い処理系では、8進数で解釈されたりします。なので、間違いのないよう基数は必ず指定してくださいね」

海未「このように、数値を文字列に変換することもできます。toFixedは整数に、toPrecisionは小数点表記になります」


Math

海未「Mathオブジェクトは数学関係の関数や定数をまとめたものです」
穂乃果「ことりちゃあああああああああああああああんっ!!」
ことり「はいはい、あとで復習しようね」
海未「ことりは、穂乃果には甘いんですから・・・穂乃果も、数学と聞いただけでその反応は何ですか」
穂乃果「いやその・・・苦手意識?」
海未「まったく・・・難しい数式を扱わなくても計算ができるようにするためのオブジェクトなんですから、むしろ穂乃果にこそ使えるようになってほしいのです」

海未「roundは四捨五入、truncは切り捨てです。これは見たままですね。sqrtは平方根、powはべき乗です。これもいいでしょう」
穂乃果「なーんだ、楽勝じゃん」
ことり「穂乃果ちゃん、一応理系なんだよね」
海未「minmaxは、与えられた引数の中からそれぞれ最小のものと最大のものを返します。引数の数は可変です」
穂乃果「余裕だねっ」
海未「では次に」

穂乃果「ことりちゃあああああああああああああああんっ!!」
ことり「結局、こうなるんだ・・・」
海未「別に三角関数の計算をしろとは言っていないではないですか」
穂乃果「そうだけど、そうだけどっ!」
ことり「はいはい、あとで復習しようね」

海未「Math.PIは円周率を表す定数です。これを使って、25.2°をラジアンに直しています」
ことり「これもさっきと同じで、3.14とか直接書かない方がいいんだね」
海未「sincostanは、ラジアン単位の数を引数にとって正弦、余弦、正接を計算する関数です。asinacosatanはその逆演算ですね」
ことり「acosだけ元に戻ってないね」
海未「このあたりは浮動小数点の限界といいますか・・・どうしても誤差は生じてしまうので、この誤差が問題になるレベルで精密な計算が必要であれば他の手を考えた方がいいですね」
穂乃果「もう、海未ちゃんが何言ってるかわからないよ・・・」

海未「これ以外にも様々な計算用の関数が用意されていますから、数値計算の処理を書く際には既存のものがないか先に調べてみるとよいでしょう」


Date

海未「Dateは日付を扱うためのオブジェクトです。さきほどのNumberMathとは少し使い方が異なります」

Date 2015-11-19T05:54:26.812Z

海未「newを使って、特定の日付を表すDateオブジェクトを作ります。日付を表すデータ型だと考えてください」
ことり「基本データ型の説明で出てこなかったってことは、プリミティブ型ではないの?」
海未「はい。プリミティブ型ではなくオブジェクトなのですが、まあその区別は後でもいいでしょう」

海未「引数なしでnew Date()とすると、現在の日時を表すDateオブジェクトを生成できます」
穂乃果「newって初めて見たね」
海未「新しいオブジェクトを作るための構文です。この先頻繁に使うことになりますよ」

海未「特定の日時のDateオブジェクトを作る場合はこうです」

穂乃果「ダウト」
海未「何でしょう」
穂乃果「ぼらららの発売日は8/25だよっ!」
海未「Date型の月は0からカウントするのです。ですから、この7は8月ですね」
穂乃果「わけがわからないよ」
海未「月を数字でなくJan.やFeb.と表記するメリケン文化が元凶ですが、まったくいい迷惑です」

ことり「getDayって何が返ってきてるのかな?」
海未「これは曜日です。0が日曜日で6が土曜日なので、あの日は水曜日でした」
穂乃果「うーん、何もかも懐かしい・・・」
ことり「初週売上300枚とかそのくらいだったよね・・・」

海未「getで始まる関数を挙げましたが、曜日を除いてすべてsetで始まる関数も用意されていて、値の設定もできるようになっています」
ことり「曜日は・・・そっか、他から計算するから、設定できちゃだめなんだね」
海未「オブジェクトを作る際に年月日時分秒を指定しましたが、年月日だけでも作ることができます。”August 25, 2010″みたいな文字列でもいいのですが私たち日本人には関係ないでしょう」

海未「Dateオブジェクトを文字列にする方法も用意されています」

海未「少し応用してみましょう。getTimeを使うと、UNIX timeといって1970年1月1日からの経過ミリ秒数が取得できます。これを利用すると時間差の計算ができます」

海未「ファーストシングルから劇場公開まで1783日でした。思えば遠くへ来たものです・・・」
ことり「長いようで短かったよね」
穂乃果「なんのまだまだっ!μ’sの物語はこれからだよっ!」
ことり「穂乃果ちゃん、そこはAqoursに譲ろうよ・・・」


海未「というわけで、数値にまつわる処理は今回紹介したオブジェクトを使って楽に実装することができます」
穂乃果「とりあえず、数式覚えなくていいのはわかったよっ!」
海未「この場とは関係なく、それは覚えてください!また赤点取りますよ、まったく・・・」
穂乃果「大丈夫っ!そうなったらことりちゃんが教えてくれるから!」
ことり「え、ええっと・・・」
海未「ことりに頼ってどうするのですか!ことりも穂乃果を甘やかさないでください!」


LINEで送る
Pocket


返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です