Hatena::Groupbugrammer

蟲!虫!蟲!

Esehara Profile Site (by Heroku) / Github / bookable.jp (My Service)
過去の記事一覧はこちら

なにかあったら「えせはら あっと Gmail」まで送って頂ければ幸いです。
株式会社マリーチでは、Pythonやdjango、また自然言語処理を使ったお仕事を探しています

 | 

2011-09-19

[]映画に出てくるHacker気取りっぽくサイトを表示してくれるJavascript 11:42

 というのを書きました。ブックマークレットで使用できるので、楽しんで飽きてください。

Nise Hack!! ? GitHub

 Wikipediaとか見ると、それっぽいかもしれません。

javascript:var%20i,s,ss=['http://code.jquery.com/jquery-latest.js','https://raw.github.com/gist/1225869/10b33f41a1e4c039f0997cc91b9f011cd7c90479/gistfile1.js'];for(i=0;i!=ss.length;i++){s=document.createElement('script');s.src=ss[i];document.body.appendChild(s);};void(0);

 例によって、このあとは復習パート。

new演算子って何者なの?

 上記のコードを書いていて気がついたのでメモ。

 普通、"hogehoge.fugafuga"的な記述をするためには如何のように書く。

var esehara = {
    job:"Mushoku",
    atama:"Warui"
}

 こうすれば、"esehara.job"で"Mushoku"と帰ってくるし、また"esehara.atama"で"Warui"が帰ってくる、のはわかる。じゃあ次の例だとどうなる?

var esehara = function(){
    this.job = "Mushoku;
    this.atama = "Warui";
}

 これでは、"esehara.job"でも"esehara.atama"でも何も返ってこない="undefined"になる。それは当然で、eseharaに代入されているのは"function()"でしかない。コンソールで叩けば、functionの内容が出てくるだけだ。ここまでならわからなくもない。問題はなんでnewすると"hogehoge.job"になるのかというところだ。詳しいことはJavaScriptのnewって本当にいらない子? - あと味を参照。だいたい弊害も載っている。

 この辺は議論が重ねられているところで、Javascript界隈では「new演算子はいるのかいらないのか問題」とされているようだ。どうやらその理由はまず"this"がグローバルオブジェクトを指す(つまり、グローバル変数になってしまう)という問題が含まれている様子。

 で、だいたいの「newを使うな」という煽動者(失礼だよ)は『Javascript:Good Parts』から来ているらしいけど、じゃあ『Javascriptパターン』はどう解決しているのか、といえば「えっ……とりあえず、thatを使っておけばいいんじゃないかな」といっている。基本的になんでもいいっぽいので、Pythonにならってselfを使ってみる。サンプルはこういう感じ。

var esehara = function(){
    var self = {};
    self.job = "Musyoku";
    return self;
}

 これの悪い点は、Prototypeとのリンクが無くなってしまう点と解説されてある。ちなみに"{}"はオブジェクトリテラルと呼ぶらしい……そんなリテラルあったのか……(普通に使ってたじゃねえか、俺)。

 newの挙動に関してはno titleの図解がわかりやすいかな。あるいは new を不当に貶める陰謀と JavaScript におけるクラスの継承構造の話 - vivid memoとか見てもいいのではないかと。

 それにしても"function()"すっきりしないなー、という感じ。

イテレータ関係

 ちょっと興味あったので、イテレータもどきの実装をやってみたんだけど、実際は内部にcounterを持ってreturnしなくとも、yieldを使えばいいことに気がついてげんなり。次に何か書くときは使えるようにしておきたいところ。

 「イテレータとは何か」というと、要するに「あるデータを順番に取り出すためのアクセス方法を提供する」という目的のモノ。next()メソッドなんかで何かしらのデータを取り出していくときに便利。というより、基本的に順番に取り出す用途のデータならば実装するとスッキリするという話なんだろうなと思ったり。『オブジェクト指向における再利用のためのデザインパターン』によれば、「データ構造を透かさない=カプセル化」という目的もあるらしいけど、その辺りはJavascriptに求めても?という気もしている。

 で、イテレータの前に、まずジェネレータというのがあるらしい。どうやらJavascript 1.7からの機能らしく、関数にyieldがあるとnext()とsend()とか追加してくれるらしい。詳しい話はJavaScript 1.7 の新機能: Days on the Moonでも見ればいいのではないかと。メタプログラミングもできるようだし。

 今回は一文字ずつ表示させる部分に使用。前に戻ることもないだろうし。あと今回はグローバル変数を使いすぎな感じになっている(本来なら、一つも使わないことが望ましいのだろうけど)。

YoungyYoungy2011/10/28 04:59I could watch Scnhdlier's List and still be happy after reading this.

jmlraujmlrau2011/10/30 01:22HyDseB , [url=http://sensenowmxui.com/]sensenowmxui[/url], [link=http://ktradxlcnvta.com/]ktradxlcnvta[/link], http://ewuommsogotq.com/

ulgfmlgyqtulgfmlgyqt2011/11/04 03:35Lu1rPp <a href="http://qyfmcxuzqcvk.com/">qyfmcxuzqcvk</a>

 |