【JavaScript】ユーザ定義関数の引数を省略可能にする
リアルタイム性のあるアプリケーションを作りたいな、と思って「はじめてのNode.js」を読んでます。
で、まあそのへん socket.ioを扱う前の章 「Expressを使ってブログシステムを作ろう」っていう章の一部でつまづいて、そして解決したのでメモ。
つまづいたところ
ユーザ定義関数の引数を省略可能にする記述。
var example = function (count, skip, callback) { if ('function' === typeof skip) { callback = skip; skip = undefined; } skip = skip | 0; ...... ...... };
定義する関数は、skip番目からcount個分のデータを取り出すっていうもの。省略できるようにする引数はskip。
こんなのでつまづくなんて、といったのはまあ察して。
実際に書く時って
この関数使うときはこう書きます。
skipを省略しないとき
example(9, 5, function() {......});
skipを省略するとき
example(9, function() {......});
どういうことかというと
要は省略するとcallbackがskipに入ってるってことです。なので、
if ('function' === typeof skip)
skipの型がfunction、つまり関数のときはskipの内容をcallbackに入れて、skipはundefinedにしておく、と。
もちろん、JavaScriptで型を比較するときは ===(イコール3つ)ですね。
で、skip = skip | 0;
ってのがよくわかりません。|
がビット演算子のORってことは調べたんだけど。
skip = skip || 0;
これと同じってことでいいのかな?
まとめ
ともかく
var example = function (count, skip, callback) { if ('function' === typeof skip) { callback = skip; skip = undefined; } ...... ...... };
これになぞって書けばユーザ定義関数の引数を省略できますよー、っていう話でした。