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