我正在阅读Robert C. Martin编写的名为Clean Code -A Handbook of Agile Software Craftsmanship的书,在他的书中他提供了许多有用的技巧来编写好的 Java 代码。
其中一个提示是:
if 语句、else 语句、for 语句等中的块应为一行。可能那行应该是一个函数调用。这不仅使封闭函数保持小,而且还增加了文档价值,因为在块内调用的函数可以有一个很好的描述性名称
对我来说,这是一个非常奇怪的提示,因为从这段代码中:
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");
}
所以基本上代码的大小翻了一番。有用吗?- 也许。
我的示例中的什么代码是所谓的clean?我究竟做错了什么?对此你们怎么看?