俺の報告

RoomClipを運営するエンジニアの日報(多分)です。

日報 #85 - noop関数に感じる閉鎖感

寒いからっつって着込むと脇汗ってもうどうすりゃいいのよ。
肩とかはしっかり冬満喫で寒いのに。。。

さて本日は技術的な気付きと何でもない気付きとの間くらいの話。

javascriptをいじっていたら、$.noopなる関数を見つけました。
不勉強で知らなかったのですが、
どうやら何もしない関数のことだそうです。
http://www.jquerystudy.info/reference/utilities/noop.html
このへんとか、
http://api.jquery.com/jquery.noop/
このへんとか参照すると、まんま「空の関数」と書いてあります。
要は「何もしない関数」だそうです。
前者のサイトでは、その利用用途についてこんな説明をしております。
myFunc = function(){};
と書くと、「まだコーディング途中なのかな?」という誤解を与えるが、
myFunc = $.noop;
と書くと、「あぁmyFuncは明示的に何もしないってことね」と分かるとのこと。
う、うーん、、、そんなものかな。
jqueryのサイトの方での利用用途は、コールバック関数を代入される変数の型宣言時などに用いるとよいよ、
的な感じで使ってくれという感じでしょうか。
まぁとにかくそういうものがあると。
ちなみにfunction(){}以外にnoop関数は特別なことしているのかな?と思って、
jqueryの本体ソースを覗いてみましたが、そのまんま特別なこともなく空関数が書いてありました。

んで、これってどうなんでしょうかね?
僕は直感的にはポジティブなんですが、なんかイマイチ理由が出てきません。
ぶっちゃけると、僕は$.noopに出会った時、「あれ?これなんだ?」と思って一々ググる羽目になりました。
もしここにfunction(){}と書いてあれば、空の関数だとすぐわかったはずです。
$.noopがnullやundefinedと同じくらい当たり前のものであればいいのですが、、、
元の表現でも十分シンプルなはずなのに、特別このようなものを用意した理由は何でしょう。
jqueryのソースは1行1文字だって削減したいはずなのに。

色々可能性を考えることができます。
jqueryというフレームワークレイヤで関数を表現する時、空関数を改めて用意する必要があった、的な超思想的、抽象的なレイヤから、空関数を集約することでメモリの節約を狙ったとかいう具体的な話まで、それこそいっぱい議論ができるかと思います。
ということで少し調べました。
結果としてわかったことは、
NOPまたはNOOPという言葉自体が、Nullとかと同等レベルによく利用されるコンピュータ関連のテクニカルタームだった、ということでした。
つまり、noopとみたら「あぁあれね、なにもしないってことね」とすぐ気付いて当たり前だということだそうです。
だからfunction(){}なんて書くよりnoopって書けよ、そっちのが分かりやすいわボケっていう雰囲気みたいです。

あーーーそうかいそうかい、と。

じゃぁ君はアレかい、500円の天狗ランチを社食と呼び、
ISSAという小洒落た上手い飯屋のことを国際宇宙ステーション呼び、
サイゼリアのことを高級イタリアンと呼ぶ文化を他人に強要するのかい。
俺は違うと思うね。
そもそもno_operationでいいじゃねぇか。
何がnoopだ、発音はなんだ、ヌップかノップかヌープかノープかすら分からなかったわ。
くそう、くやしいのうくやしいのう、、、
はぁ。

現場からは以上です。