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

回答編集履歴

2

最後の部分を調整

2018/02/28 11:07

投稿

miyabi-sun
miyabi-sun

スコア21445

answer CHANGED
@@ -27,8 +27,12 @@
27
27
 
28
28
  1個目: 例外スローはyambejpさんの案です。
29
29
  2個目: 関数の外から変数を弄る
30
- この書き方は外の変数に依存するので使い勝手が非常に悪く、プロのエンジニアはまぁ採用しません)
30
+ この書き方は外の変数に依存するので使い勝手が非常に悪いです。
31
31
 
32
+ それとコードを見れば分かりますが、
33
+ いつの間にか`flags.test`の値がfalseになったのかコードからは中々読み取れません。
34
+ 従ってこういう書き方を多くの場面でやっているプロジェクトは技術的負債で進捗が大幅に遅延することになります。
35
+
32
36
  ```JavaScript
33
37
  var main = function () {
34
38
  var flags = {
@@ -47,8 +51,11 @@
47
51
  ```
48
52
 
49
53
  3個目: オブジェクトの参照を渡して中から弄る
50
- (ダサいですがありって感じですかね)
51
54
 
55
+ ダサいですがありって感じですかね。
56
+ これもflags.testが勝手に書き換わるのが何処かは分かりかねますが、
57
+ testの引数がflagsを欲しがっている事が分かるので、まだ推測し易いと言えるでしょう。
58
+
52
59
  ```JavaScript
53
60
  var test = function (flags) {
54
61
  // 引数がオブジェクトや配列の場合参照渡し(※)になるので中から値を弄って変えられる
@@ -59,7 +66,7 @@
59
66
  test: true
60
67
  }
61
68
  console.log("sample");
62
- test();
69
+ test(flags);
63
70
  if (flags.test) return; // 質問文的にこの1行が抜けないのであまり意味なし?
64
71
  console.log("sample2");
65
72
  }
@@ -67,12 +74,22 @@
67
74
  ```
68
75
 
69
76
  4個目: 成功した時に今後やりたい動作を関数として定義してやる
70
- (ちょっとトリッキーですが、質問文のやりたい事を素直に叶えるとこうなる感じ)
71
77
 
78
+ ちょっとトリッキーですが、これは多くのオブジェクト指向言語のDIコンテナに似た解決方法です。
79
+
80
+ JavaScriptは言語仕様的に関数が第一級オブジェクトなので、
81
+ 配列等と同様に変数に格納・引数に設定・戻り値として返す事が可能です。
82
+
83
+ 上級者が質問文の条件で何とかやれと言われたら、
84
+ testに関数を引数としてよこすようにし、こういう形で解決を目指すことになるかと思います。
85
+
72
86
  ```JavaScript
73
87
  // 関数を引数にセットできる
74
88
  var test = function (cb) {
75
- // cb()書けば実行でるが、今回は実行しないサンプルなメントアウト
89
+ // 条件を満たしたときのールバック関数を実行
90
+ if (true) {
91
+ cb();
92
+ }
76
93
  }
77
94
  var main = function () {
78
95
  console.log("sample");

1

探偵さんをパワーアップ

2018/02/28 11:07

投稿

miyabi-sun
miyabi-sun

スコア21445

answer CHANGED
@@ -7,7 +7,7 @@
7
7
  最近妻(夫)が浮気してるような気がする。
8
8
  探偵に頼もう(test関数)実行。
9
9
  しばらくして探偵から連絡がありました。
10
- 探偵「いやあ、どうやら貴方の配偶者は浮気してたみたいなんで裁判してきましたこれが金です。」
10
+ 探偵「いやあ、どうやら貴方の配偶者は浮気してたみたいなんで勝手に裁判してきましたこれが和解金です。いやあ相場より若干少なかったですね。
11
11
 
12
12
  これくらい酷いことをやってます。
13
13