WHAT'S NEW?
Loading...

俺達のNode.js #002

なんていうか、また自分のブログの存在を忘れてて、ついつい更新が滞ってしまったようだ。

恐らくそういった要素をみんなが期待してると思うので特に悪いとか思ってないのでさっさと続けよう。

さぁ、NodeJSだ。

ところで記述の話になるけど、Node.jsなのか、nodejsなのか、NodeJSなのか、よくわかってないんだけど、一体全体どういう書き方をすればいいのか?

Node.jsだけじゃなくてAngular.JSとかもそうだよね。というわけで公式サイト見てみた。

node.js

Node.jsが正解らしい。でもページタイトルは『Node.js』じゃなくて『node.js』になってるんだよなぁ。
まぁいけどさ。一応、記事のタイトル書きなおした。


ところでなんでビールもったおねーちゃんの画像なの?と、君は疑問に思うかもしれない。
全く意味は無い。さて、早速始めよう。

JavaScriptってなんだっけ?

そう、Node.jsはJavaScriptだ。正確には、Googleの変態達が作ったV8エンジンという、Chromeの本体とでも言えるJavaScriptのエンジンを元に作られた、サーバサイドJavaScriptだ。

というわけで、JavaScriptだ。
ところでJavaScriptってなんだっけ?って話し。

要するにスクリプト言語だ。

スクリプト言語ってなんだっけ?って話し。

スクリプトなのでいちいちコンパイルしなくて良い。コンパイルとかは勝手にパーサーがやってくれるので、無意識で良い。もちろん己の意識を無にすると寝ちゃうのでダメだ。

というわけで、テキストに書いたプログラムが動くなら、それはスクリプト言語だ。
逆に、テキストで描いたプログラムを機械語(バイナリ)にしないといけないのはコンパイル言語だ。
Javaとかそうだ。

JavaとJavaScriptは全然違う言語だ。グレープとグレープフルーツくらい違う。オーストラリアとオーストリアくらい違う。ケアレスミスとエアロスミスくらい違う。

Node.jsはサーバサイドで動くJavaScriptだ。

ブラウザ側で実行されるJavaScriptはクライアントサイドJavaScriptだ。Node.jsはサーバサイドJavaScriptなので、サーバ側でもクライアント側でもJavaScriptというスクリプト1個でいろいろとチョメチョメボテぐりできるという、一粒で二度美味しい感じだ。

無駄に他の言語覚える必要がないのでコンパクトでフットワークが良いので、俺は大好きだ。

JavaScriptの基礎をサラサラサーティに確認してみる系男子

よし、JavaScriptをおさらいしてみよう。うんこうんこ。

バージョン


ECMAっていう団体が管理してて、ECMAScriptともいわれるJavaScript。1997年の出来事。省略形はES。

ECMAでは今バージョン5が主流になり、その後5.1が出た。2011年の話し。ES5って奴。
なんだかそろそろ6が出るとか出ないとか。ES.nextという名前らしい。

オブジェクト


ES5から強化されたオブジェクト。具体的には以下のように書けばオブジェクトが作られる。
var myObject = {};
この『{』と『}』の間に、プロパティやメソッドを指定することができる。例えば、年齢を意味するageに32を、自分の名前としてname、中身をass-holeにし、更にメッセージを表示するメソッドを指定するなら、こんな感じになる。
var myObject = {
    age: 32,
    name: 'ass-hole',
    message: function() {
        console.log('Hi guys!!');
    }
}
簡単に、そして乱暴に説明すると、オブジェクトとは、値を格納するプロパティと、動作を指定するメソッドを、一緒に閉じ込めておける箱みたいなものだ。

typeof関数で表示してみれば一発でオブジェクトになってるのがわかると思う。
console.log(typeof(myObject));
Google Chromeのデベロッパーツールで見てみれば一目瞭然だ。



Windowsなら『Ctrl+Shift+I』もしくは『Ctrl+Shift+J』、Macだと『cmd+shift+i』で、デベロッパーツールやJavaScriptコンソールが開くので見てみると良いプペポ。

この俺達のJavaScriptは、オブジェクト言語につきもののモジュール化、カプセル化、再利用性なんかも実装されているのでなにげにさり気なくしどけなさがクールですな。

プリミティブ型


JavaScriptには以下の型がある。変数とかの種類って感じだね。
  • String (文字、文字列)
  • Number (浮動小数点)
  • Boolean (真偽値)
  • Undefined (未定義)
  • Null (無)
そう、たった5つしか無いんだよ。覚えるの楽だね。うん。
注意が必要なのは、Undefinedだ。Nullはだれでも知ってると思う。
Undefinedは、『変数に最初に割り当てられる状態』に過ぎず、Nullとは別ね。

試しに以下のように、変数を宣言だけして、すぐに中身を表示させるとUndefinedになるわけだ。
var foo;
console.log(foo);


幾ら試しても変数に値が入らないのは、うっかりスコープ外の変数を参照してた、なんて時にはその変数はUndefinedになるわけで、案外デバグ時に参考になると思うんだよな。

そうそう、それからもう一つ大事な注意点がある。Stringだ。実はこのString型、いろいろなメソッドが用意されているんだけど、設定された文字を変更することはないんだよな。だから何か別の変数に結果を入れないといけない。

例えばreplace関数でAをBに変えたとしても、元のStringはずっとAのまま。
var str = 'ABC';    // strにABCを設定
console.log(str.replace('A', 'B'));  // AをBに変えた結果を表示
console.log(str);   // strを表示



こういうのを文字列リテラルの非破壊関数とかっていうらしい。別にそんな名前覚えなくてもいいし、ググる必要もない。基本的に文字列は壊れない、とおぼえておけばいいよ。

コアオブジェクト


JavaScriptが最初からもってる組み込まれたオブジェクトで代表的な物は以下になる。



Dateは日付関数で、JavaScriptの日付に関してはシンプルにできていて使い勝手が良い。
var today = new Date(); // 今日の日付を取得
1970年より古い年月日は扱えないので注意だ。そしてクライアントサイドなJavaScriptでは、プラットフォームの日付が受け継がれるので、OSの日付がずれていたらJavaScriptの日付もずれてしまうのも注意。

数学関連では、円周率を表す定数、三角関数なんかが予め用意されている。面白いところでは、ランダム数もこの数学関連に含まれている。
var rand = Math.random(); // 0~0.9999・・・までの数字
var round = Math.round(rand); // 四捨五入
var ceil = Math.ceil(rand): // 切り上げ
var floor = Math.floor(rand); // 切り捨て
正規表現はいろいろ自分でググればいい。詳しく開設するのは面倒臭いし、だれでも3日あれば基礎はマスターできるレベルなんで。

アホみたいにメールアドレスを正規表現でどうにかしようとしてる奇特な方もたまにいらっしゃるが、無駄なことをするのが好きでたまらないなら死ぬまでやってろボケ!と言いたい。Perlだったらこの程度で十分。

/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/

あんまり余計な事してると老けるぞ。
ちなみにこのサイトはもはやジョークになってる。

配列は特に説明はいらないと思うので割愛。

真偽値はBooleanオブジェクトを生成するときに使うんだけど、あんまり使う機会はないかもしれない。ちなみにif文とかでつかうtrue、falseと、Booleanオブジェクトは別物なのでそこだけ意識していればいいかな。

整数値に関しては、数値オブジェクトを作ることが出来て、なにがオモロイかというと、その変数で使える最大値とかをプロパティで取得できるんだ。まぁあんまり使うことはないかもしれない。

文字列オブジェクトに関しては、普通にダブルクオートとかで指定する文字列リテラルを、そのままオブジェクトにしたような感じだ。
var string = 'hoge'; // ただの文字列リテラル
var Str = new String('Fuga'); // Stringオブジェクト
なにが興味深いかというと、1+1のリテラルをeval()で評価した時なんかがわかりやすい。
var string1 = '1+1';
var string2 = new String('1+1');
console.log(eval(string1)); // 数値の2
console.log(eval(string2)); // 1+1という文字列

クロージャ


クロージャってのは、簡単にいうと、自分で抱えてる範囲より、一つ上の範囲の変数にもアクセスできる関数ってことだ。
function hoge() {

    var mystring = 'this is it.';
    this.fuga = fuga(); // 関数内でクロージャを宣言

    function fuga() {
        console.log(mystring);
    }
}

これはそんなに難しい話じゃないかな。つまりそういう機能を持った関数ってことね。

長くなりそうだ!!

長くなりそうなので続く。