回答編集履歴
2
流れや文章を少しずつ修正しました
test
CHANGED
@@ -14,9 +14,19 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
+
ですが……そのコードは自然でシンプルなのですか?本当に?何を根拠に言ってるの?
|
18
|
+
|
19
|
+
こういう風に詰められるとだんだん不安になってきますね。
|
20
|
+
|
21
|
+
|
22
|
+
|
17
23
|
どうすれば良いかの勘所は[リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック](https://www.amazon.co.jp/%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89-%E2%80%95%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%81%AA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-Theory-practice-Boswell/dp/4873115655)という書籍を読めば身につきます。
|
18
24
|
|
25
|
+
どんなにロジカル人のコードでもこれを読んでない人のコードは品質がバラツキます。
|
26
|
+
|
19
27
|
この書籍を読んだ人のコードはとても読みやすく、共通部品を取り出すとはなんなのかが分かりますので、長いエンジニア人生で一番役に立つ書籍となるだろうと言っても過言ではありません。
|
28
|
+
|
29
|
+
ただし序盤はともかく終盤は難解ですので、まずは読める範囲までで良いので繰り返し読んでくださいね。
|
20
30
|
|
21
31
|
|
22
32
|
|
@@ -44,7 +54,7 @@
|
|
44
54
|
|
45
55
|
|
46
56
|
|
47
|
-
まず、プログラミングは
|
57
|
+
まず、オブジェクト指向に限らず、プログラミングに於いては以下の流れを守ってください。
|
48
58
|
|
49
59
|
|
50
60
|
|
@@ -56,33 +66,47 @@
|
|
56
66
|
|
57
67
|
|
58
68
|
|
59
|
-
この
|
69
|
+
この一連の流れは全てが終わるまで、絶対に次へ行かないでください。
|
60
70
|
|
61
71
|
質問文のコードが「共通・非共通・共通・非共通・共通」の流れになってしまうのは、
|
62
72
|
|
63
|
-
|
73
|
+
殆どのケースに於いて1→3の流れを守れずに小出しにしているからです。
|
64
74
|
|
65
75
|
|
66
76
|
|
67
|
-
|
77
|
+
また「少しの情報を受け取って処理することを繰り返す」のも、
|
68
78
|
|
69
|
-
|
79
|
+
「全ての情報を受け取ってまとめて処理する」のも全体的な処理時間は変わりません。
|
70
80
|
|
71
|
-
|
81
|
+
例外が出たらその時はその時で悩んでください。
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
---
|
72
86
|
|
73
87
|
|
74
88
|
|
75
89
|
次にコードに対して大まかな名前を付けてください。
|
76
90
|
|
77
|
-
まずゴール(あるべき姿)はなんですか?そのまま名称にして、クラス名や関数名として利用
|
91
|
+
まずゴール(あるべき姿)はなんですか?そのまま名称にして、クラス名や関数名として利用できます。
|
78
|
-
|
79
|
-
次に達成条件を箇条書きにしてください。
|
80
92
|
|
81
93
|
|
82
94
|
|
83
|
-
達成条件
|
95
|
+
達成条件も箇条書きにしてください。
|
84
96
|
|
97
|
+
これらの達成条件も個別に関数名やクラスのメソッド名等に使えます。
|
98
|
+
|
85
|
-
|
99
|
+
また、達成条件は「どんなケースでも達成しなければならないのでしょうか?」
|
100
|
+
|
101
|
+
「スイッチをONにした時だけ達成出来れば良いのですか?」なども予め考えて置くと捗ります。
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
---
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
ここでやってオブジェクト指向プログラミングのターンです。
|
86
110
|
|
87
111
|
|
88
112
|
|
@@ -94,13 +118,13 @@
|
|
94
118
|
|
95
119
|
|
96
120
|
|
97
|
-
|
121
|
+
---
|
98
|
-
|
99
|
-
何をまとめられそうか、何をまとめるのが無理そうかが一目で区別出来るようになるでしょう。
|
100
122
|
|
101
123
|
|
102
124
|
|
103
|
-
|
125
|
+
この流れで統一するようにすれば、
|
126
|
+
|
127
|
+
何をまとめられそうか、何をまとめるのが無理そうかが一目で区別出来るようになってきます。
|
104
128
|
|
105
129
|
|
106
130
|
|
1
校正しました
test
CHANGED
@@ -6,29 +6,21 @@
|
|
6
6
|
|
7
7
|
|
8
8
|
|
9
|
-
長ったらしい変なコードの羅列は、何かタイトルを付けてインデックス付きでどっか別の箇所に飛ばしてください。
|
10
|
-
|
11
|
-
これをサブルーチン化、関数化と呼びます。
|
12
|
-
|
13
|
-
歌詞の「*繰り返し」と同じようなもんです。
|
14
|
-
|
15
|
-
|
16
|
-
|
17
9
|
質問文の共通、非共通と並んでいる箇所ですが、
|
18
10
|
|
19
11
|
文章として読んだ時にそれが最も自然でシンプルなあるべき姿なのでしょうか?
|
20
12
|
|
21
|
-
もしYesと言い切れるのなら
|
13
|
+
もしYesと言い切れるのなら変える必要はありません。
|
22
14
|
|
23
15
|
|
24
16
|
|
25
|
-
|
17
|
+
どうすれば良いかの勘所は[リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック](https://www.amazon.co.jp/%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89-%E2%80%95%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%81%AA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-Theory-practice-Boswell/dp/4873115655)という書籍を読めば身につきます。
|
26
18
|
|
27
|
-
この書籍
|
19
|
+
この書籍を読んだ人のコードはとても読みやすく、共通部品を取り出すとはなんなのかが分かりますので、長いエンジニア人生で一番役に立つ書籍となるだろうと言っても過言ではありません。
|
28
20
|
|
29
21
|
|
30
22
|
|
31
|
-
--
|
23
|
+
---
|
32
24
|
|
33
25
|
|
34
26
|
|
@@ -36,13 +28,7 @@
|
|
36
28
|
|
37
29
|
|
38
30
|
|
39
|
-
2軸の別々の事をやるプログラムに対して、
|
40
|
-
|
41
|
-
共通化できそうな所を上手く抽出するのがプログラミングや設計の腕の見せどころです。
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
31
|
+
質問文を見返すと、「共通・非共通・共通・非共通・共通」となってますね。
|
46
32
|
|
47
33
|
1行1行の処理に着目しすぎのように思えます。
|
48
34
|
|
@@ -62,27 +48,33 @@
|
|
62
48
|
|
63
49
|
|
64
50
|
|
65
|
-
1. 入力(必要な情報の収集)
|
51
|
+
1. 入力(必要な情報の収集) + 加工(入力値を処理しやすくする)
|
66
52
|
|
67
|
-
2.
|
53
|
+
2. 処理
|
68
54
|
|
69
|
-
3. 処理
|
70
|
-
|
71
|
-
|
55
|
+
3. 出力(結果を画面なりファイルなりへ書き出す)
|
72
56
|
|
73
57
|
|
74
58
|
|
59
|
+
この1〜3の流れは常に全て終わった後に次のフェイズへ移行してください。
|
60
|
+
|
75
61
|
質問文のコードが「共通・非共通・共通・非共通・共通」の流れになってしまうのは、
|
76
62
|
|
77
|
-
多くのケースに於いて1→
|
63
|
+
多くのケースに於いて1→3の流れを守れずに小出しにしているからです。
|
64
|
+
|
65
|
+
|
78
66
|
|
79
67
|
全てのデータが出揃うまで処理や出力は遅延させるようにしてください。
|
80
68
|
|
69
|
+
ただし、この手順を崩さなければ処理速度面で困るケースが発生することもあります。
|
70
|
+
|
71
|
+
多くの場面では1〜3にした位で遅くなる事はありません、その時になって初めて悩んでください。
|
81
72
|
|
82
73
|
|
83
|
-
次にコードには名前を付けてください。
|
84
74
|
|
75
|
+
次にコードに対して大まかな名前を付けてください。
|
76
|
+
|
85
|
-
まずゴールはなんですか?
|
77
|
+
まずゴール(あるべき姿)はなんですか?そのまま名称にして、クラス名や関数名として利用してください。
|
86
78
|
|
87
79
|
次に達成条件を箇条書きにしてください。
|
88
80
|
|
@@ -94,15 +86,25 @@
|
|
94
86
|
|
95
87
|
|
96
88
|
|
97
|
-
集
|
89
|
+
情報の収集・加工が済んだら処理に必要なデータを、クラスに投げ込んでインスタンスを作ってください。
|
98
90
|
|
99
91
|
別の処理を挟みたいなら、オプショナルな条件のメソッドを用意してONにするようにしてください。
|
100
92
|
|
101
|
-
全てのデータを投げ込み終わったら、作ったインスタンスのstartメソッドを叩いて結果を待
|
93
|
+
全てのデータを投げ込み終わったら、作ったインスタンスのstartメソッドを叩いて結果を待ちましょう。
|
102
94
|
|
103
95
|
|
104
96
|
|
97
|
+
この流れで統一するようにすれば、
|
98
|
+
|
99
|
+
何をまとめられそうか、何をまとめるのが無理そうかが一目で区別出来るようになるでしょう。
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
---
|
104
|
+
|
105
|
+
|
106
|
+
|
105
|
-
最初は何千行もの神クラスを作り込んだりして酷いコードになる
|
107
|
+
最初は何千行もの神クラスを作り込んだりして酷いコードになると思います。
|
106
108
|
|
107
109
|
[オブジェクト指向プログラミング](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91)の腕が上がってくれば、比例して読みやすく抽象化された素晴らしいコードが書けるようになるはずです。
|
108
110
|
|