27
ES Harmony Proxy on Firefox 4 id:mooz @stillpedant

ES Harmony Proxy on Firefox 4

Embed Size (px)

Citation preview

Page 1: ES Harmony Proxy on Firefox 4

ES Harmony

Proxyon

Firefox 4

id:mooz@stillpedant

Page 2: ES Harmony Proxy on Firefox 4

About

mooz (@stillpedant)

Add-ons:

KeySnail

Emacs 版 Vimperator

Clipple

クリップボードマネージャ

gpum

Gmail の未読メール管理

See http://mooz.github.com/index-ja.html

Page 3: ES Harmony Proxy on Firefox 4

What’s the ES Harmoney?

ECMAScript 3

ECMAScript 4

ECMAScript 5

ECMAScript Harmoney未来の JavaScript

Page 4: ES Harmony Proxy on Firefox 4

What’s the Proxy?

• プロパティアクセス (代入, 取得)• in 演算子の適用• delete 演算子の適用• new F(), F()

などの操作がされた時,JavaScript 規定の動作ではなく

“ユーザの設定した関数”が呼び出されるようなオブジェクト

ES Harmoney (未来の JavaScript) の機能

Page 5: ES Harmony Proxy on Firefox 4

• Proxy の作成には Proxy.create() を使用

Proxy.create()

ハンドリング時に呼ばれる関数ハンドルしたい操作

Page 6: ES Harmony Proxy on Firefox 4

Example (1/3)

var x = obj.x;

get が呼ばれ name に “x” が入る.

Page 7: ES Harmony Proxy on Firefox 4

Example (2/3)

obj.y = 100;

set が呼ばれ

name に “y”, val に 100 が入る.

Page 8: ES Harmony Proxy on Firefox 4

Example (3/3)

(“foo” in obj)

has が呼ばれ name に “foo” が入る.

Page 9: ES Harmony Proxy on Firefox 4

Proxy for?

Q: 「こんなものが何の役に立つの?」

A: 「組み込みオブジェクトを模倣できるよ」

B: 「DSL! DSL!」

夢が広がる

Page 10: ES Harmony Proxy on Firefox 4

Proxy on Firefox 4

• Firefox 4 では Proxy が使用可能

Page 11: ES Harmony Proxy on Firefox 4

Use cases

• 二つほど使用例をでっち上げることに成功

1.not

2.safe

Page 12: ES Harmony Proxy on Firefox 4

1.not

Page 13: ES Harmony Proxy on Firefox 4

• あるオブジェクト (親含む) が,

あるプロパティを持たない場合に実行したい

嬉しくない

Why not?

Page 14: ES Harmony Proxy on Firefox 4

• obj を Proxy でラップ

• obj に対する in 演算子の効果を反転

嬉しい!

not(obj)

Page 15: ES Harmony Proxy on Firefox 4

not :: Before & After

Before:

After:

Page 16: ES Harmony Proxy on Firefox 4

not (implementation)

時に呼ばれる関数

結果を反転して返す

Page 17: ES Harmony Proxy on Firefox 4

2. safe

Page 18: ES Harmony Proxy on Firefox 4

• 深いオブジェクトのプロパティをたどりたい

– プロパティが途中で定義されていなかったりする

– null や undefined が出てきたりする

• 単純に obj.a.b.c と出来ない

やってられない

Why safe?

Page 19: ES Harmony Proxy on Firefox 4

嬉しい!

safe(x)

• x を Proxy でラップ

• . の代わりに $ を使ってプロパティをたどる

• 安全

Page 20: ES Harmony Proxy on Firefox 4

safe :: Before & After

Before:

After:

Page 21: ES Harmony Proxy on Firefox 4

safe (implementation)

このProxy オブジェクトの get メソッドに

という文字列が渡る

で文字列を分割して得られたプロパティを順にたどる

(この中に面倒な処理を隠蔽)

Page 22: ES Harmony Proxy on Firefox 4

Proxy 便利

Page 23: ES Harmony Proxy on Firefox 4

でも、Firefox 4 限定でしょ?

Page 24: ES Harmony Proxy on Firefox 4

宗教上の理由でFirefox

使えないし……

Page 25: ES Harmony Proxy on Firefox 4

ご安心下さい

Page 27: ES Harmony Proxy on Firefox 4

References

[[harmony:proxies]] http://wiki.ecmascript.org/doku.php?id=harmony:proxies

Proxy Tutorialhttp://soft.vub.ac.be/~tvcutsem/proxies/index.html

Proxies are Awesome!http://www.slideshare.net/BrendanEich/metaprog-5303821

ご清聴ありがとうございました