teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2018/01/02 07:06

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -35,4 +35,39 @@
35
35
 
36
36
  コードからは2.か3.であろうと思えますが、オブジェクトの外部からの隠蔽(つまり2.)なのか巨大なオブジェクト実装の中のそれぞれの関数からの隠蔽なのか(つまり3.)今一つ曖昧な感じがしました。
37
37
 
38
- 単に文法とコード上の意味だけで論じてもかまわないと思うのですが、どのような情報をどう管理したいのか(ユースケース)の想定を明確にして論じると、より有意義な議論になるような気がします。つまり閲覧者がどこにポイントを置くかを考えやすい(回答しやすい)と思います。
38
+ 単に文法とコード上の意味だけで論じてもかまわないと思うのですが、どのような情報をどう管理したいのか(ユースケース)の想定を明確にして論じると、より有意義な議論になるような気がします。つまり閲覧者がどこにポイントを置くかを考えやすい(回答しやすい)と思います。
39
+
40
+ ---
41
+
42
+ 追記:
43
+
44
+ 追記された部分を拝見しましたが、BeatStarさんのコメントのようなアプローチで整理できる気がしました。
45
+
46
+ もしアクセスする情報ごとにメソッドのグループが単純に分類できるようならそれぞれを囲むスコープで定義するという方法もある気がします。しかしそんなにはっきりと分かれるようなら元々別のモジュールとして定義できる気がするのでそもそも解にならないのかも知れませんね・・・。それに分かり易さの点からいえば下記のv1, v2, ...のようなコンテキストをある論理的な塊のオブジェクトとしてまとめ、特にmyModule内部の関数群からそうまで厳密には区別しなくてよい気もします。そのあたりコンテキストのライフサイクルによっても適切さが変化するような気はします(下記は単純にA,Bそれぞれに静的なコンテキストだけが必要とされるケースしか表していません)
47
+
48
+ ```javascript
49
+ // グループA, Bがあったとして
50
+
51
+ function myModule() {
52
+ var a1, a2, b1, b2;
53
+
54
+ [ a1, a2 ] = (function () {
55
+ var v1, v2, v3, ...; // a1, a2の共通コンテキスト
56
+
57
+ function a1() { ... }
58
+ function a2() { ... }
59
+ return [a1, a2];
60
+ })();
61
+
62
+ [ b1, b2 ] = (function () {
63
+ var v1, v2, v3, ...; // b1, b2の共通コンテキスト
64
+
65
+ function b1() { ... }
66
+ function b2() { ... }
67
+ return [b1, b2];
68
+ })();
69
+
70
+ // a1(), a2(), b1(), b2()などを用いた論理
71
+ ...
72
+ }
73
+ ```