回答編集履歴
3
コメントの内容を回答文に反映
answer
CHANGED
@@ -1,31 +1,38 @@
|
|
1
|
-
関数xがガッツリ変数aに依存している場合は、
|
1
|
+
もし関数xがガッツリ変数aに依存している場合は、
|
2
|
-
|
2
|
+
関数x内で止めれば良く、2は有力な選択肢かと思います。
|
3
3
|
|
4
|
+
しかし、関数xは変数aの値によらず動作可能であれば2はありえません。
|
5
|
+
何の関係もない変数aが横から出てきて、関数xの動作をせき止めるのは、
|
6
|
+
関数xの挙動や可能性が大幅に制限され、実行すべき所で実行出来なくなる危険があります。
|
7
|
+
|
4
8
|
---
|
5
9
|
|
6
|
-
しかし、こうして質問文に上がってくるということは、
|
7
|
-
関数xは変数aの挙動によらず動作しても問題ない関数なのでは?
|
8
|
-
|
10
|
+
私の考えは1寄りですね。
|
11
|
+
mainは関数x実行前に変数aを確認しておくべきでしょう。
|
12
|
+
信号を見もせずに横断歩道を渡り始め、クラクションを鳴らされ慌てて戻るようなものですからね。
|
9
13
|
|
14
|
+
コードリーディングの時も
|
10
|
-
|
15
|
+
関数xにジャンプしにいって読みに行ったものの、
|
11
|
-
|
16
|
+
最初の行で変数aにせき止められて何も動作せずに戻って来ることになります。
|
17
|
+
読みに行かなきゃよかった。
|
12
18
|
|
13
|
-
また、ソースを追う側もmainからスタートし、
|
14
|
-
|
19
|
+
意味のない往復をやることになるので、
|
15
|
-
|
20
|
+
`if (a) x();`程度で済むならmainにif文を書いた方が可読性が上がる可能性もあります。
|
16
21
|
|
17
|
-
更に関数の中身はやることや見るべき箇所が少なければ少ないほど、
|
18
|
-
|
22
|
+
---
|
19
23
|
|
20
|
-
|
24
|
+
しかし、2の思想の設計も数多くあります。
|
25
|
+
HaskellのモナドやJavaScriptライブラリのjQueryでは
|
26
|
+
とりあえず実行してみて、失敗しても安全に着地してくれるという設計で作られています。
|
21
27
|
|
28
|
+
これはこれで一貫していて美しいので、
|
29
|
+
最終的には好みやプロジェクトでの合意に落ち着く問題かと思います。
|
30
|
+
|
22
31
|
---
|
23
32
|
|
24
|
-
|
33
|
+
もし1を採用した場合、頻度次第では憂鬱になるかと思います。
|
25
|
-
|
34
|
+
頻度が多い場合の回避策としてこんな手法を考えました。
|
26
35
|
|
27
|
-
ですので、折衷案を考えました。
|
28
|
-
|
29
36
|
```C
|
30
37
|
main ()
|
31
38
|
{
|
2
yをtry_xに変更
answer
CHANGED
@@ -5,13 +5,20 @@
|
|
5
5
|
|
6
6
|
しかし、こうして質問文に上がってくるということは、
|
7
7
|
関数xは変数aの挙動によらず動作しても問題ない関数なのでは?
|
8
|
+
その場合1一択でしょう。
|
8
9
|
|
9
10
|
その場合、関数x実行前に変数aを確認しておくべきで、
|
10
|
-
2の場合、信号を見もせずに横断歩道を渡り始め
|
11
|
+
2の場合、信号を見もせずに横断歩道を渡り始め、クラクションを鳴らされ慌てて戻るようなものです。
|
11
12
|
|
13
|
+
また、ソースを追う側もmainからスタートし、
|
14
|
+
関数xを呼んでいるのでそちらを確認しにいき、
|
15
|
+
最初の行でaでせき止められて何も動作せずに戻って…これは`if (a) x();`程度で済むならmainに書いてあった方が可読性も高いです。
|
16
|
+
|
12
17
|
更に関数の中身はやることや見るべき箇所が少なければ少ないほど、
|
13
18
|
他のモジュールと組み合わせて動かしやすいものになります。
|
14
19
|
|
20
|
+
…とまぁ、様々な状況を考慮すると1が良いでしょうね。
|
21
|
+
|
15
22
|
---
|
16
23
|
|
17
24
|
かと言って1も頻度次第では憂鬱になるかと思います。
|
@@ -22,10 +29,10 @@
|
|
22
29
|
```C
|
23
30
|
main ()
|
24
31
|
{
|
25
|
-
|
32
|
+
try_x();
|
26
33
|
}
|
27
34
|
|
28
|
-
|
35
|
+
try_x ()
|
29
36
|
{
|
30
37
|
if (a) x();
|
31
38
|
}
|
@@ -36,5 +43,5 @@
|
|
36
43
|
}
|
37
44
|
```
|
38
45
|
|
39
|
-
関数xをラッピングし、変数aの顔色を伺う関数
|
46
|
+
関数xをラッピングし、変数aの顔色を伺う関数try_xを登場させます。
|
40
47
|
こうすることで、関数xはシンプルに保たれますし、mainもとりあえず関数xを呼んでみるという使い方ができるようになります。
|
1
文章校正
answer
CHANGED
@@ -1,18 +1,24 @@
|
|
1
|
-
関数xがガッツリ変数aに依存している場合は、
|
1
|
+
関数xがガッツリ変数aに依存している場合は、関数x内で止めれば良いです。
|
2
|
-
ガードとして上部に足せば良いでしょう。
|
3
|
-
2一択
|
2
|
+
従って2一択。
|
4
3
|
|
5
4
|
---
|
6
5
|
|
6
|
+
しかし、こうして質問文に上がってくるということは、
|
7
|
-
|
7
|
+
関数xは変数aの挙動によらず動作しても問題ない関数なのでは?
|
8
8
|
|
9
|
-
関数
|
9
|
+
その場合、関数x実行前に変数aを確認しておくべきで、
|
10
|
-
2
|
10
|
+
2の場合、信号を見もせずに横断歩道を渡り始めるようなもので、クラクションを鳴らされ慌てて戻るようなものです。
|
11
|
-
下手すると全く同じような関数を作成する必要が生まれるかもしれません。
|
12
11
|
|
12
|
+
更に関数の中身はやることや見るべき箇所が少なければ少ないほど、
|
13
|
+
他のモジュールと組み合わせて動かしやすいものになります。
|
14
|
+
|
15
|
+
---
|
16
|
+
|
13
17
|
かと言って1も頻度次第では憂鬱になるかと思います。
|
14
|
-
|
18
|
+
ここが質問文のスタートラインとみました。
|
15
19
|
|
20
|
+
ですので、折衷案を考えました。
|
21
|
+
|
16
22
|
```C
|
17
23
|
main ()
|
18
24
|
{
|