若手IT勉強会に行ってきたよ
第11回でした
前回に引き続き jQuery 1.3.2 のソースコードリーティング。たぶん、コードリーディングの内容自体は、学のある人がまとめてくれると思いますので、もうちょっと別の視点で。
ちなみに、リーディング対象は bind メソッド。一応、bind メソッドについて一通り読み切った感じになりますね。次回は unbind あたりをまず読みに掛かると思います。
若手IT勉強会の参加に当たり
次回参加してみたい、という方の為にリソースを。
- 公式ページ
- 事前に用意しておくことを強く推奨
- skype ID(skypeのオープンチャットで議論とかURLの共有とか)
- jquery-1.3.2.js - jqueryjs - jQuery 1.3.2 - jQuery JavaScript Library - Google Project Hosting(これが無いと話になりません><)
jQuery を読んで発見した事
よく見るイディオム
例えば jQuery 1.3.2 の 2480 行目あたり
var namespaces = type.split("."); type = namespaces.shift(); handler.type = namespaces.slice().sort().join(".");
これ、split している時点で配列である事が明白であるにも関わらず、3行目で slice() しているんですよね。
slice で配列に対して slice() すると同じ配列が返ってくるので、何か深い意味があるのか? とちょっと話題沸騰したのだけど、気が付いてみれば簡単な事だった。
slice() の次に実行している sort() メソッドは破壊的メソッドなので、 namespaces.sort() としてしまうと、元の配列を破壊してしまう。しかし、 slice() をする事で新しい配列を生成して、その配列に対して sort を掛けて、元の配列に対して影響が出ないようにしているんですね。
なお、Ruby なら sort と sort! で使い分けれるとかドヤ顔で言うと袋だたきに遭う事は容易に想像できるため何も言わなかった。
あとは
なんかこの正規表現怪しくね? というところを jQuery の Trac で確認したら、本当にバグとして上がっていた(#5138 (Namespaced events sometimes get triggered when the *beginning* of the namespace matches) – jQuery Core - Bug Tracker)事などがありましたね。
収穫
- Python Hack-a-thon #2 : ATNDがあること。別に python じゃなくて良いらしいので、後先考えずに登録した
- FireQuery :: Add-ons for Firefox 名前は知っていたけど、これを気に入れてみた。すごい便利!
- iPhone 同士で自分の電話番号やアドレスの交換をできる bump という iPhone アプリ(これはアツい!!*1)
その他のこと
Twitter の ハッシュタグ
#wakateit でつぶやいてます! ご意見・ご感想があればタグを付けておくと、誰かが捕捉するかもしれません。
というわけで
次回もよろしくおねがいしましあ!
*1:合コン的な意味で