我正在閱讀一本名爲Clean Code -A Handbook of Agile Software Craftsmanship的書,作者爲羅伯特C.馬丁並且在他的書中,他給出了很多有用的技巧,如何編寫好的Java代碼。在foreach語句中的塊是否必須只有一行?
而這些祕訣之一是:
塊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");
}
所以基本上代碼已經翻了一番size.Was它有用嗎? - 也許。
我的例子中的什麼代碼叫做clean?我究竟做錯了什麼?你們怎麼看待這個問題?
IMHO,該建議是在荒謬接壤。 – NPE
請把那本書丟掉。或者燒掉它。 (後者更安全,其他人永遠無法閱讀)。 –
這隻有審美相關性。 – Mob