昨天學完命名後,今天來學函式吧。
讀完整本書後個人認為函式的主要準則就是:簡短,單一。
但只有這樣講的話實在太過抽象,我們馬上做更詳細的解析吧。
要盡量避免在if或else或while中出現巢状結構,for迴圈的話通常會用於取得或尋找東西所以很難不在裡面做其他判斷。
但如果多個for迴圈的巢状結構反而會不好code review跟debug
這部份單用說明會很難說明。因此直接看code吧。
假如要印出一個MapList裡所有value為null的map,我以前的寫法:
巢状結構的printMapKeyWhoseValueIsNull:
public void printMapListKeyWhoseValueIsNull(List<Map<String, String>> listMap){
for (Map<String, String> map : listMap){
System.out.println("---------------------");
for (String key : map.keySet()){
if (map.get(key) == null){
System.out.println(key);
}
}
}
}
重構後:
public void printMapListKeyWhoseValueIsNull(List<Map<String, String>> listMap){
for (Map<String, String> map : listMap){
System.out.println("---------------------");
printMap(map);
}
}
private void printMapValueIsNullKey(Map<String, String> map){
for (String key : map.keySet()){
if (map.get(key) == null){
System.out.println(key);
}
}
}
如此一來雖然行數變多了但閱讀起來會相對比較輕鬆一點。
而且由於印出map內容這件事情被分開來了,因此會更好的code review。
或許會有讀者發現怎麼這麼快就總結了。
這邊我只能跟大家說對不起QQ,最近這幾天開始臨時有點忙所以內容變少了。
我會盡量想辦法下次增加內容的。