第三章函數
3.1 短小
函數的最重要的原則說三遍:短小、短小、短小。
if,else,while等語句,代碼塊應該儘量只有一行,且此行是一個函數調用語句。函數名應該具有說明性,增加文檔的價值。
例:JDK源碼:
private static inthugeCapacity(int minCapacity) {
if (minCapacity < 0) //overflow
throw newOutOfMemoryError();//此處可以猜測是拋出內存益出相關錯誤。
return (minCapacity > MAX_ARRAY_SIZE)? Integer.MAX_VALUE :MAX_ARRAY_SIZE;
}
3.2 只做一件事
函數應該只做一件事。判別方法:是否可以再拆分出一個函數。
3.3 每個函數一個抽象級別。
函數的語句都要在同一抽象層次級別上。例如經典的MVC模型,就是一種抽象級別分離的方法。
自定鄉下讀代碼:向下規則
讀程序方法:程序就像一系列TO起頭的段落,每一段都描述當前的抽象級別,並引用下一層的抽象級別的段落。
3.4switch語句
抽象工廠設計模式。
3.5 使用描述性的名稱
別害怕長名稱。具有描述性的名稱比段而小令人費解的名稱好。
例 c = a*b 應改爲result = multiplicand *multiplier,增加可讀性。
命名方式要保持一致。
3.6 函數參數
函數參數越少越好,最理想是沒有參數,儘量避免三個參數。參數少有利於測試。
ArrayList源碼中的方法基本都是不多於一個參數
如果參數需要二個或者三個以上,可以將其中一些參數封裝成類。
比較:
Circle make Circle(double x,double y, doubleradius);
Circle makeCircle(Point center, double radius);
3.8分隔指令與詢問
函數要麼做什麼事,要麼回答什麼事。
3.9.1 抽離try /catch代碼塊
將try/catch代碼塊的主體部分抽離出來,另外形成函數。
3.10 別重複自己
3.11結構化編程
Dijkstra規則:每個函數,函數中的代碼塊應有一個入口,一個出口。且只有一個return語句,循環中不能有break,continue語句,永遠不用goto語句。
小結
函數是語言的動詞,類是名詞。
第六章函數
6.2數據對象的反對稱性
過程式代碼便於在不改動既有數據結構的前提下添加新函數。
面向對象代碼便於在不改動既有函數的前提下添加新類。
6.3得濹忒耳律
模塊不應瞭解他所操作對象的內部情形。
第七章錯誤處理
錯誤處理不應搞亂代碼邏輯。
7.1使用異常而非返回碼
預見異常時,不應出現 print(“xxy異常”)活者return null這種形式
應採用拋出異常的方式
Ex:
private void rangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
7.7 別返回null值
7.8 別傳遞null值
第十章 類
10.1 類的組織
Java約定,類應從一組變量列表開始。如果有公共靜態常量,應該先出現。然後是靜態私有變量,以及私有實體變量.很少會有公共變量。
10,2 類應該短小
類的名稱應當描述其權責。
單一權責原則:類或者模塊應有且只有一條加以修改的理由。
類應該只有少量實體變量。
每個變量被每個方法所使用,稱該類具有最大的內聚性。
10.3 爲了修改而組織
對於多數系統,修改一直持續。