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

回答編集履歴

3

コメントの内容を回答文に反映

2017/10/13 08:18

投稿

miyabi-sun
miyabi-sun

スコア21472

answer CHANGED
@@ -1,31 +1,38 @@
1
- 関数xがガッツリ変数aに依存している場合は、関数x内で止めれば良いです。
1
+ もし関数xがガッツリ変数aに依存している場合は、
2
- 従って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
- 場合1一択しょう
10
+ 考えは1寄りすね
11
+ mainは関数x実行前に変数aを確認しておくべきでしょう。
12
+ 信号を見もせずに横断歩道を渡り始め、クラクションを鳴らされ慌てて戻るようなものですからね。
9
13
 
14
+ コードリーディングの時も
10
- その場合、関数x実行前変数aを確認しておくべきで
15
+ 関数xにジャンプにいっ読みに行ったものの
11
- 2場合、信号を見もせず横断歩道を渡り始、クラクションを鳴戻るようものです。
16
+ 最初行で変数aせき止められて何も動作せずにって来ことにります。
17
+ 読みに行かなきゃよかった。
12
18
 
13
- また、ソースを追う側もmainからスタートし、
14
- 関数xを呼んでいるのでそちらを確認しにいき
19
+ 意味のな往復をやことになるので、
15
- 最初の行でaでせき止められて何も動作せずに戻って…これは`if (a) x();`程度で済むならmainに書いてあった方が可読性も高いです。
20
+ `if (a) x();`程度で済むならmainにif文を書いた方が可読性が上がる可能性あります。
16
21
 
17
- 更に関数の中身はやることや見るべき箇所が少なければ少ないほど、
18
- 他のモジュールと組み合わせて動かしやすいものになります。
22
+ ---
19
23
 
20
- …とまぁ様々な状況を考慮ると1が良いでしょうね
24
+ しかし2の思想の設計も数多くあります。
25
+ HaskellのモナドやJavaScriptライブラリのjQueryでは
26
+ とりあえず実行してみて、失敗しても安全に着地してくれるという設計で作られています。
21
27
 
28
+ これはこれで一貫していて美しいので、
29
+ 最終的には好みやプロジェクトでの合意に落ち着く問題かと思います。
30
+
22
31
  ---
23
32
 
24
- かと言って1も頻度次第では憂鬱になるかと思います。
33
+ し1を採用した場合、頻度次第では憂鬱になるかと思います。
25
- ここ質問文スタートラインました。
34
+ 頻度多い場合回避策してこんな手法を考えました。
26
35
 
27
- ですので、折衷案を考えました。
28
-
29
36
  ```C
30
37
  main ()
31
38
  {

2

yをtry_xに変更

2017/10/13 08:18

投稿

miyabi-sun
miyabi-sun

スコア21472

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
- y();
32
+ try_x();
26
33
  }
27
34
 
28
- y ()
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の顔色を伺う関数yを登場させます。
46
+ 関数xをラッピングし、変数aの顔色を伺う関数try_xを登場させます。
40
47
  こうすることで、関数xはシンプルに保たれますし、mainもとりあえず関数xを呼んでみるという使い方ができるようになります。

1

文章校正

2017/10/13 07:52

投稿

miyabi-sun
miyabi-sun

スコア21472

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
- ただし、関数xの動きが変数aにあまり依存してない場合2はNGとります。
7
+ 関数x変数aの挙動よらず動作しても問題ない関数のでは?
8
8
 
9
- 関数の内部はやることが少ない方が汎用性が高なります。
9
+ その場合、関数x実行前に変数aを確認しておべきで、
10
- 2を採用することで、変数a顔色伺い続ける関数為かり用途が限定されす。
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
  {