1.命名規(guī)則
- 所有變量涤躲,方法名和類名都應(yīng)該遵循CamelCase風(fēng)格段审。唯一不同的是抑钟,類名的首字母要大寫妹懒。
class UserService {
private String firstName;
public String getFirstName() {
return firstName;
}
}
- 常量全部使用大寫字母并且以下劃線分割
final int MAX_AGE = 20;
- 變量名或者方法名不應(yīng)包含太多單詞雀监。越簡單越好双吆,同時要能表達(dá)出意圖眨唬。
//This is a BAD practice
public void saveUserIntoMongoDBDatabase(User user);
//This is much better
public void saveUser(User user);
2.寫你所想
定義一個變量時不要偷懶,給它一個全名好乐,而不是名字里的一個字母匾竿。變量名應(yīng)該能表達(dá)出他的值。即便你知道這個變量是干嘛的蔚万,并不意味其他開發(fā)者也知道岭妖。同時當(dāng)你過一陣時間再來看這段代碼時,也可能記不起這個變量的含義反璃。
讓我們看看下面的一段代碼:
public boolean check() {
if (a < max) {
return true;
} else {
return false;
}
}
這段代碼非常不清晰昵慌,其他開發(fā)當(dāng)然也不明所以。我們重構(gòu)一下淮蜈,看看怎么更好地寫這段代碼斋攀。
public boolean isAgeAcceptable() {
if (userAge < maxAge) {
return true;
} else {
return false;
}
}
3. 變量/方法聲明
類的變量應(yīng)該在其頂部聲明。如此一來梧田,你總能知道去哪里看變量的聲明而不是滾動整個文件去尋找淳蔼。
如果一個變量只在一個方法中使用侧蘸,那么將其聲明為一個局部變量即可。
方法聲明的順序應(yīng)該和它們使用的順序一致(從上而下)鹉梨。舉個栗子讳癌,如果一個方法調(diào)用當(dāng)前的方法,那么這個方法應(yīng)該聲明當(dāng)前方法的下面存皂。
同時晌坤,越重要的方法就應(yīng)該聲明在前面。
4. 單一職責(zé)
一個方法應(yīng)該只負(fù)責(zé)一件事情艰垂。如果你的方法同時做啦兩件以上不同的事情泡仗,你應(yīng)該這個方法的一些功能移到其他方法。
這樣的方法才容易理解猜憎,擴(kuò)展和被其他方法復(fù)用娩怎。
舉個栗子,你有一個方法saveUserAndChargeCard()胰柑,將用戶保存到數(shù)據(jù)庫并且刷用戶的信用卡截亦。這個方法不好,因?yàn)樗职?strong>And而且干啦兩件事柬讨。在方法命中避免使用and和or等等崩瓤。你可以將這個方法分成saveUser()和chargeCard().
5.短方法
對開發(fā)這而言,短方法的長度并沒有一個標(biāo)準(zhǔn)的準(zhǔn)則踩官∪赐埃可能有人說最多10行,有些人說最多五行蔗牡,有些情況下20行也是可以的颖系。所以究竟多少才合適呢?事實(shí)上辩越,并木有一個標(biāo)準(zhǔn)答案嘁扼。盡量使你的方法越短越好。通常5到10行為最佳黔攒。當(dāng)然你的方法有12行或則15行也不會有人打你的趁啸,但是要保證你這15行代碼的可理解性和高質(zhì)量。
6.最小化你的代碼
能用一行搞定的就別用三行督惰。這意味著你寫代碼時考慮下最佳的方式不傅。
看看下面的例子:
boolean hasCreditCard(User user) {
if (user.hasCard) {
return true;
} else {
return false;
}
}
乍看之下,好像并無不妥赏胚,但是這段其實(shí)可以簡化一下访娶。
boolean hasCreditCard(User user) {
return user.hasCard;
}
看到?jīng)],一行抵過五行栅哀,所以下筆前三思囖震肮。
7.重復(fù)是原罪
在你的工程里避免代碼冗余称龙。如果你的方法不能在其他地方復(fù)用,那么想個更好的方式去實(shí)現(xiàn)它戳晌。你的方法應(yīng)該盡可能地通用鲫尊。這也將有助于你的小伙伴直接使用你的方法而不是再去寫一個。
8. 注釋
注釋在以前一段時間內(nèi)都是開發(fā)者的日常操作沦偎,現(xiàn)在有些不同啦疫向,如果你給你的代碼加啦一段注釋,那么說明你的代碼不能自解釋豪嚎,你應(yīng)該選擇一個更好的方法來實(shí)現(xiàn)它搔驼。
注釋存在的另一個問題是,開發(fā)在經(jīng)常去改代碼去忘啦改注釋侈询。
當(dāng)然如果你寫啦一段很復(fù)雜的算法舌涨,你的注釋將幫助其他程序員理解。
9. 代碼檢測工具
即便你采納啦以上的所有建議扔字,我也推薦你使用一些工具來檢查你的代碼質(zhì)量囊嘉。這個工具可以掃描你的代碼,并指出你出錯的地方革为。因?yàn)槟闳斯z查時可能會遺漏扭粱。
其中一個工具是SonarQube.一款代碼質(zhì)量分析的優(yōu)秀產(chǎn)品。
10.最佳實(shí)踐
無論你在實(shí)現(xiàn)什么功能震檩,我想有人在你之前就已經(jīng)做過啦琢蛤。所以在你實(shí)現(xiàn)這個需求之前可以先調(diào)研一下。