jsとカプセル化の談義

18
Kenichiro Ota @oota_ken

@t_wada 先生!TAの指標としてお聞きしたいのですが、JavaScriptでクラスを作る方法はカプセル化の観点からはクロージャーベースがよいのでしょうか?それともプロトタイプベース?

2012-05-24 15:11:23
Takuto Wada @t_wada

@oota_ken そもそもなぜクラスを作りたいんですか?

2012-05-24 15:14:30
Kenichiro Ota @oota_ken

@t_wada おだいだとクラスベースじゃなくて、 var hoge = { hoge : 1, hoge : function() {} }; みたいでオケってこと?

2012-05-24 15:16:27
Takuto Wada @t_wada

@oota_ken クラス指向じゃなくてオブジェクト指向しようぜ

2012-05-24 15:17:59
Kenichiro Ota @oota_ken

@t_wada ふむふむ。メソッドはプロトタイプチェーン?そこまでしなくてもオケ?

2012-05-24 15:21:20
Takuto Wada @t_wada

@oota_ken 俺は必要になるまで使わないと思う

2012-05-24 15:27:23
Kenichiro Ota @oota_ken

@t_wada var oota = {name: "oota", hello: function() { return "hello " + http://t.co/wghdD8U4;}}; こういう系でオケってこと?

2012-05-24 15:30:09
Kenichiro Ota @oota_ken

@oota_ken @t_wada そもそもインスタンスベースだったら、プロトタイプなんて書き換えなくていいかw

2012-05-24 15:32:40
Takuto Wada @t_wada

@oota_ken そのオブジェクトを作る関数を書けば、クロージャの中で望むカプセル化もできるよね。

2012-05-24 15:33:12
Kenichiro Ota @oota_ken

@t_wada あ、そういう話です。まーでもそこまでしなくてもいいかなって思い始めました。カプセル化とかちょっとクラスベースすぎるかなとw

2012-05-24 15:34:37
Takuto Wada @t_wada

@oota_ken いや、カプセル化とクラスは切り分けて考えられるでしょう。まずはクラスを作るという習慣を一度捨てよう。クラスは最初に作るものでは無くて、あとから必要に応じて抽出できるものです。そして js ではクラスがスコープを規定するのでは無くて、関数がスコープを規定する。

2012-05-24 15:37:00
Kenichiro Ota @oota_ken

@t_wada ふむふむ。関数型にむしろ近い形で作った方がいい感じなのかな?最近実は自分専用スクリプトには全然クラス作ってないので、そっちの方がやりやすいかも。

2012-05-24 15:38:17
Takuto Wada @t_wada

@oota_ken カプセル化や情報隠蔽は大事です。ただそれらがクラスじゃないとできないというのは(少なくとも js では)違うかなと。

2012-05-24 15:38:20
Kenichiro Ota @oota_ken

@t_wada 先生!どうもクラスベースにラッピングされアットものを使っていたので、そこらへんまだJavaScriptの流儀を習得できていないので懇親会でペロペロねがいます!

2012-05-24 15:39:12
Kenichiro Ota @oota_ken

@t_wada function Person(name) { return { hello: function() { return "hello " + name; }} oota = Person("oota"); oota.hello();

2012-05-24 15:43:33
Takuto Wada @t_wada

@oota_ken UpperCamel な関数名はコンストラクタ風に new を付けて呼び出すことを想定しているものだけに付けましょう

2012-05-24 15:45:03
Kenichiro Ota @oota_ken

@t_wada りょ、りょうかいw そこらへんからしてやばいねw どうも、本読んでから実務ではクラスベースばっかりで脳みそがとろけていたよ・・・ありがとう。

2012-05-24 15:45:55
Kenichiro Ota @oota_ken

@t_wada function person(name) { return { hello: function() { return "hello " + name; }} 書き直した。関数ベースのカプセル化としてはこのレベルでOK?あ、忙しいのにすみません

2012-05-24 15:47:50
Takuto Wada @t_wada

@oota_ken yes, yes. 意図が伝わって嬉しいです。まずはそのくらいの小ささからスタートだなぁ。

2012-05-24 15:49:16