大学生からの Web 開発

廃れない技術よ 我が身に

【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;
  }
  ......
  ......
};

これになぞって書けばユーザ定義関数の引数を省略できますよー、っていう話でした。