思途|青島Java培訓之10條偏執的程式設計技巧

weixin_34041003發表於2017-12-06

接下來,中享思途青島總部的途途將給大家介紹10項接近於“偏執”的Java程式設計技巧的前部分,雖然看似怪異但往往十分管用,謹獻給那少數不拘傳統的程式設計師們吧。

1.把字串常量放在前面

把字元常量放在比較函式equals()比較項的左側來防止偶然的 NullPointerException 是一個相當不錯的主意,把一種表示式換成另一種更加的表示式,並不會失去什麼,只要我們的Options是真實存在的。

6517281-084c9e213c6c9f9e.png

2.不要相信早期的JDK APIs

Java誕生之初,程式設計異常痛苦,因為那時API不夠成熟,所以常常遇到這種情況,看起來很奇怪對吧?

6517281-7707cd7e62a4857c.png

再來看看這個Javadoc:“如果抽象路徑名錶示的不是一個目錄,那麼這個方法返回null。否則返回一個字串陣列,其中每個字串表示當前目錄下的一個檔案或目錄。”

最好再加上判空檢查,確保無誤

6517281-a77f8cdef04319ed.png

3.不要相信“-1”

我知道這很偏執,Javadoc中關於 String.indexOf() 的早期描述是這樣的:“字元在字元序列中第一次出現的位置將作為結果[被返回],如果字元不存在則返回-1。”

所以“-1”就可以被理所當然的拿來用嗎?當然不是!

6517281-ceed22fb90e298b2.png

4.避免意外的賦值

即便是最優秀的程式設計師也不可避免會犯這種錯誤,假設這是JavaScript,我們暫且偏執地認為是這種語言:

6517281-dec468715fff8956.png

再強調一次,如果你的表示式中有常量,將它放在等式左邊,這樣當你想要新增下一個=時,才不容易出錯。

5.檢查null和長度

不管什麼時候,你都要確保你的集合、陣列或其他什麼是“存在且不為空”的。

6517281-73c96859c0908bec.png

你不知道這些陣列來自哪兒,也許是早期的JDK API呢?

本期,中享思途青島總部的途途將繼續為大家總結推薦那些“偏執卻有用的Java程式設計技巧”,一起來看!文承上期:

6.所有的方法都用 final 宣告

你可以告訴我任何你想要的開閉原則,不過那都是胡說八道,我不相信你(可以正確繼承我的類),也不信我自己(不會意外地繼承我的類)。因此除了介面(專門用於繼承)都應該是嚴格的 final,是的,寫成final。

6517281-70d203237dc799e1.png

7.所有的變數和引數都用 final 宣告

因為我不確定我什麼時候,就會無意間重寫了某個值,這也是為什麼所有的變數和引數都用final宣告的原因。

6517281-9d8c2b349cead500.png

8.過載的時候不要相信泛型

有時候,你覺得你寫了一個超級棒的API,但接著出現一群使用者,他們只是把一切型別生搬進 Objec 中,直到停止工作,然後他們連線到了錯誤的方法,並認為這一切是“你的錯”!

思考一下這個:

6517281-cb42200c91f19a1c.png

因為,你知道的…你的使用者們,他們就像這樣:

6517281-45302b0be5d99244.png

還有這樣的:

6517281-a3e7e2e2dd7b204c.png

所以說,偏執有時候還是有好處的。

9.總是在switch語句里加上default

Switch作為最滑稽的表示式之一,我不知道是該心存敬畏還是默默哭泣。但既然無法擺脫,不如在必要的時候好好地,正確的使用它吧,例如:

6517281-c82a15640ebc4514.png

因為在當 value=3 被引入到軟體中的時候,default 就能發揮作用,使其正常執行,這對 enums 也一樣適用。

10.用大括號隔開 switch 的每一個 case 塊

switch是最坑爹的語句,任何喝醉了或是賭輸了的人都可以在某種語言中使用它。看看下面這個例子:

6517281-9393c79048d5f346.png

在switch語句中,為所有的case都只定義了一個作用域。但其實這些case並不是真正意義上的語句,他們更像是標籤,而switch就是指向這些標籤的goto語句。這意味著變數final int j可以被任何case訪問,不論我們是否有break。看起來並不是很直觀。我們可以通過新增簡單的花括號為每一個case建立一個新的巢狀的作用域,當然不要忘了在每個 case  的語句塊最後加 break。

相關文章