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

回答編集履歴

3

主題を追加

2015/10/11 08:50

投稿

philomagi
philomagi

スコア267

answer CHANGED
@@ -1,5 +1,6 @@
1
- 拝読させていただいたところ、真っ先に浮かんだのは分岐条件の関数です。
1
+ 拝読させていただいたところ、真っ先に浮かんだのはCheckAble関数の修正です。
2
2
 
3
+ まずは、条件分岐について。
3
4
  「参照先は壁か」「参照先は空か」「参照先には自分の石があるか」という条件は、このアルゴリズムにおいて頻出し、かつ重要なものです。
4
5
  なので、これらを全て関数にして共通化し、かつ名前を付けて分かりやすくしてみましょう。
5
6
  「参照先は壁か」→isWall
@@ -17,7 +18,6 @@
17
18
 
18
19
  最後に、checkAble関数の仕事を確認してみましょう。checkAbleは、名前の上では「ひっくり返せる石があるかどうかを確認すること」が仕事ですが、コードでは「実際に石をひっくり返す」作業も担当しています。
19
20
  今回のように、一つのメソッドに複数の作業を混在させ、かつ同一のデータ(ここではfield[n][m])を各作業で利用すると、分岐条件や石をひっくり返すロジックに修正が生じた場合、互いに影響を与えてしまう恐れがあります。すると、修正範囲が広がったり、バグの原因が特定しにくくなったりします。
20
- (結構面倒そうなので)ここでは省略させて頂きますが、実際にはcheckAbleを二つの関数に分け、さら分けた関数利用するゲームの進行を表す関数を導入すると良さそうです。挑戦してみてください。
21
+ (結構面倒そうなので)ここでは省略させて頂きますが、実際にはcheckAbleを二つの関数に分けてみると各処理毎影響範囲限定きます。挑戦してみてください。
21
22
  例)
22
- checkAble → isReversibleとreverseに分割
23
+ checkAble → isReversibleとreverseに分割
23
- isReversibleを満たす時にreverseを読みだすstartOthero関数を導入

2

脱字修正

2015/10/11 08:50

投稿

philomagi
philomagi

スコア267

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  拝読させていただいたところ、真っ先に浮かんだのは分岐条件の関数化です。
2
2
 
3
3
  「参照先は壁か」「参照先は空か」「参照先には自分の石があるか」という条件は、このアルゴリズムにおいて頻出し、かつ重要なものです。
4
- なので、これらを全て関数にて共通化し、かつ名前を付けて分かりやすくしてみましょう。
4
+ なので、これらを全て関数にて共通化し、かつ名前を付けて分かりやすくしてみましょう。
5
5
  「参照先は壁か」→isWall
6
6
  「参照先は空か」→isEmpty
7
7
  「参照先に自分の石があるか」→isExistMine

1

表現を修正

2015/10/11 08:46

投稿

philomagi
philomagi

スコア267

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  拝読させていただいたところ、真っ先に浮かんだのは分岐条件の関数化です。
2
2
 
3
3
  「参照先は壁か」「参照先は空か」「参照先には自分の石があるか」という条件は、このアルゴリズムにおいて頻出し、かつ重要なものです。
4
- なので、これらを全て関数にて共化し、かつ名前を付けて分かりやすくしてみましょう。
4
+ なので、これらを全て関数にて共化し、かつ名前を付けて分かりやすくしてみましょう。
5
5
  「参照先は壁か」→isWall
6
6
  「参照先は空か」→isEmpty
7
7
  「参照先に自分の石があるか」→isExistMine