今日は、node.jsの豆知識でも書こうかと思います。
最近やっと覚えてきた変数やfunctionの宣言について。
■変数の宣言
var hoge:
■複数の変数宣言
var hoge , huga , foo;
■変数の初期化
var hoge = 1;
■複数の変数初期化
var hoge = 1 , huga = 2 , foo = 3;
■変数初期化 - パターン2
hoge = 1;
var hoge:
■複数の変数宣言
var hoge , huga , foo;
■変数の初期化
var hoge = 1;
■複数の変数初期化
var hoge = 1 , huga = 2 , foo = 3;
■変数初期化 - パターン2
hoge = 1;
変数は var で宣言します。
これは元々のjavascriptと全く同じです。
パターン2のように var で宣言しないとグローバル変数になり、このファイル以外でも参照できる変数となってしまいます。
グローバル変数として宣言してしまうとサーバーのメモリ上に常に保持されてしまうので、極力使わない方がいいでしょう。というか使っちゃだめです。
最初すごい使いづらかったのが、複数の変数をコンマ区切りで宣言・初期化ができること。
よく見るのが
var hoge = 1,
huga = 2,
foo = 3;
みたいに初期化してるコード。
みたいに初期化してるコード。
var hoge = 1;
var huga = 2;
var foo = 3;
のが見やすいし分かりやすいと思うのは俺だけ…?
次に、関数の宣言です。
javascriptでは、関数はfunctionとして宣言します。
■function宣言 - パターン3
のが見やすいし分かりやすいと思うのは俺だけ…?
次に、関数の宣言です。
javascriptでは、関数はfunctionとして宣言します。
■function宣言 - パターン1
function hoge(){
var huga = 1:
}:
■function宣言 - パターン2
function hoge(){
var huga = 1:
}:
■function宣言 - パターン2
var hoge = function(){
var huga = 1:
}:
}:
■function宣言 - パターン3
var hoge = new Function ("var huga = 1; return huga;");
ほとんどの場合パターン1、パターン2を使うと思います。
パターン3は特殊で、文字列を関数として定義します。
パターン1とパターン2の違いは、変数として定義されるかどうか、になります。
変数として宣言した場合、宣言するまでは使えません。しかし、関数として定義すると定義されたファイル上であればどこでもその関数を参照できます。
//これはOK
var test = hoge();
console.log(test);
var test = hoge();
console.log(test);
function hoge(){
return 1:
}:
//これはエラー
var test = hoge();
console.log(test);
console.log(test);
var hoge = function (){
return 1:
}:
}:
この性質を使えば、複雑で長い処理をfunction内に書いて、メインの処理の流れだけを上の方に記述することができますね。
また、関数名を定義しない無名関数、また記述した時点で実行する即時関数などもあります。
■無名関数を変数に代入(先ほどのパターン2)
return 1:
}:
■即時関数
(function (){
console.log("hoge");
})(); //hogeと表示される。
var hoge = function (){
return 1:
}:
■即時関数
(function (){
console.log("hoge");
})(); //hogeと表示される。
では最後に。
Node.jsで必須となるコールバック関数について。
■コールバック関数とは
処理が終わってから呼び出される関数。
非同期処理を行う際はこれを呼び出すことによって終了後の処理を記述する。
例:
var a = 3;
var b = 5;
//非同期処理を行う関数
function hoge(a , b , callback){var b = 5;
//非同期処理を行う関数
var c = "huga";
setTimeout(function(){
//三秒後に処理
c = a + b ;
//コールバック関数を実行
callback( c );
},3000);
return c:
}:
//非同期処理を実行、戻り値を受け取る
var test = hoge(a, b, function(c){ //←←これがコールバック関数の実処理
//setTimeoutで三秒後にこの処理が呼ばれる
console.log(c);//8と表示
});
//setTimeoutで三秒後にこの処理が呼ばれる
console.log(c);//8と表示
});
console.log(test);//hugaと表示
こんな感じです。
非同期関数hogeを呼び出し、その戻り値を受け取っても a+b の値は返ってきません。
a+bを処理しているのはsetTimeoutの中なので、三秒後に処理されその前にreturnした値はhugaになります。
Node.jsを使う目的としては非同期処理をしたいということが多いと思うので、この仕組みが理解できていないとつらいと思います。
少しでも参考になれば幸いです。
では、少し宣伝を。
僕らの作っているビジュアルノベル
「ワールドコード」三章第8ページを更新しました。
是非一度ご覧ください。
■8ページ紹介
学校に乗り込んできた狩野は相も変わらず傲岸不遜な態度で自分勝手に命令を下す。
それに振り回される真名だが、他人の機微を感じ取ってしまう自身の能力のせいで授業にうんざりしていた彼女にとっては寧ろ願ってもなかった。
二人の信頼は利害の一致であり、それ以上ではない…のだろうか。
それに振り回される真名だが、他人の機微を感じ取ってしまう自身の能力のせいで授業にうんざりしていた彼女にとっては寧ろ願ってもなかった。
二人の信頼は利害の一致であり、それ以上ではない…のだろうか。
■ワールドコード紹介
「神はいなくても悪魔はいるように、この世に悪は存在してても正義なんてこれっぽっちも存在してねえんだよ」
この世界には人智を超えた能力の持ち主達が存在する。
人の心を読む、瞬間移動、千里眼、未来予知、念動力、透視、念写、etc,etc・・・
いわゆる”超能力”。その力の持ち主達は超能力者と呼ばれ、その常識外の力を用いて世界を裏から操る。
狩野恭一《かりのきょういち》は、超能力者全てを憎み、敵と見なしている。
敵は全ての超能力者、対して彼らの戦力は、研究所で彼と共に仕事をしている二人の人間 ―― 特別な力を持つ女子高生一条真名《いちじょうまな》、異常な演算能力をもつ天才少年ミハエル=ブランケンハイム ―― だけだ。
無謀なる彼らの戦いは、正義を振りかざす追跡者の討伐から始まる――
■サイト
ノベルサイト「螺旋ベーグル」
http://www.rasenbagel.com/