私は、 RobertC.Martinによって書かれたCleanCode-A Handbook of Agile Software Craftsmanshipという本を読んでいます。彼の本の中で、彼は優れたJavaコードを書くための役立つヒントをたくさん提供しています。
そして、それらのヒントの1つは次のとおりです。
ifステートメント、elseステートメント、forステートメントなどのブロックは、1行の長さにする必要があります。おそらく、その行は関数呼び出しである必要があります。これにより、囲んでいる関数が小さく保たれるだけでなく、ブロック内で呼び出される関数にわかりやすい名前を付けることができるため、ドキュメンタリーの価値も高まります。
私にとって、それは非常に奇妙なヒントでした。なぜなら、このコードから:
public Map<String, List<Issue>> mapComponentToIssueList(List<Issue> issues) {
Map<String, List<Issue>> map = new HashMap<String, List<Issue>>();
for (Issue issue : issues) {
String componentName = issue.getComponents().iterator().next().getString("name");
if (map.containsKey(componentName)) {
map.get(componentName).add(issue);
} else {
List<Issue> list = new ArrayList<Issue>();
list.add(issue);
map.put(componentName, list);
}
}
return map;
}
この原則を使用して、私はこれを持っています:
public Map<String, List<Issue>> mapComponentToIssueList(List<Issue> issues) {
Map<String, List<Issue>> componentNameIssueListMap = new HashMap<String, List<Issue>>();
for (Issue issue : issues) {
populateMapWithComponenNamesAndIssueLists(componentNameIssueListMap, issue);
}
return componentNameIssueListMap;
}
private void populateMapWithComponenNamesAndIssueLists(Map<String, List<Issue>> componentNameIssueListMap, Issue issue) {
String componentName = getFirstComponentName(issue);
if (componentNameIssueListMap.containsKey(componentName)) {
componentNameIssueListMap.get(componentName).add(issue);
} else {
putIssueListWithNewKeyToMap(componentNameIssueListMap, issue, componentName);
}
}
private void putIssueListWithNewKeyToMap(Map<String, List<Issue>> componentNameIssueListMap, Issue issue, String componentName) {
List<Issue> list = new ArrayList<Issue>();
list.add(issue);
componentNameIssueListMap.put(componentName, list);
}
private String getFirstComponentName(Issue issue) {
return issue.getComponents().iterator().next().getString("name");
}
つまり、基本的にコードのサイズは2倍になりましたが、役に立ちましたか?- 多分。
私の例のどのコードがいわゆるクリーンですか?私は何が間違っているのですか?これについてどう思いますか?