咱們在閱讀一些優秀項目的源碼時,必定會感嘆他們代碼的整潔和一致性。而做爲第一印象,代碼格式的整齊是讓人可以繼續閱讀下去的動力。今天咱們分別從垂直格式和橫向格式兩個方面來討論代碼的格式。修正格式的方法有:間隔、靠近和調整順序。java
垂直格式程序員
在垂直格式方面,咱們要向報紙的排版學習。微信
首先有一個標題告訴你這欄新聞要講什麼,好讓你知道是否要繼續閱讀下去。對應到代碼中就是類的名字,咱們要力求只經過名字就能夠知道這個類要描述什麼事情;而後,代碼的第一段每每都交代了整個故事的概要,相似於代碼中的接口,咱們每每經過接口瞭解類中有哪些函數,每一個函數都是幹什麼的。瞭解了這些以後,纔會去讀詳細的內容。編輯器
咱們習慣於使有關聯的代碼彼此靠近,無明顯關聯的代碼相互分隔。所以咱們不但須要使用空白行間隔代碼,還要調整代碼位置,把有關聯的代碼放在一塊兒,一般咱們把被調用的函數放在調用函數的下面。這樣別人在讀咱們的代碼的時候不再用經從來回「跳躍」的痛苦了。函數
此外,還須要注意的就是報紙的排版、段落和段落之間用空行作間隔。寫代碼也能夠用一樣的方式,例如,咱們習慣於在包聲明、導入聲明和每一個函數之間用空白行來分隔。咱們直接拿代碼來解釋。學習
package com.thoughtworks.selenium;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.Reporter;
import org.testng.internal.IResultListener;
import java.io.File;
public class ScreenshotListener implements IResultListener {
File outputDirectory;
Selenium selenium;
public ScreenshotListener(File outputDirectory, Selenium selenium) {
this.outputDirectory = outputDirectory;
this.selenium = selenium;
}
public void onTestFailure(ITestResult result) {
Reporter.setCurrentTestResult(result);
try {
outputDirectory.mkdirs();
File outFile = File.createTempFile("TEST-" + result.getName(), ".png", outputDirectory);
outFile.delete();
selenium.captureScreenshot(outFile.getAbsolutePath());
Reporter.log("<a href='" +
outFile.getName() +
"'>screenshot</a>");
} catch (Exception e) {
e.printStackTrace();
Reporter.log("Couldn't create screenshot");
Reporter.log(e.getMessage());
}
Reporter.setCurrentTestResult(null);
}
}
package com.thoughtworks.selenium;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.Reporter;
import org.testng.internal.IResultListener;
import java.io.File;
public class ScreenshotListener implements IResultListener {
File outputDirectory;
Selenium selenium;
public ScreenshotListener(File outputDirectory, Selenium selenium) {
this.outputDirectory = outputDirectory;
this.selenium = selenium;
}
public void onTestFailure(ITestResult result) {
Reporter.setCurrentTestResult(result);
try {
outputDirectory.mkdirs();
File outFile = File.createTempFile("TEST-" + result.getName(), ".png", outputDirectory);
outFile.delete();
selenium.captureScreenshot(outFile.getAbsolutePath());
Reporter.log("<a href='" +
outFile.getName() +
"'>screenshot</a>");
} catch (Exception e) {
e.printStackTrace();
Reporter.log("Couldn't create screenshot");
Reporter.log(e.getMessage());
}
Reporter.setCurrentTestResult(null);
}
}
是否是適當增長空白行就提升了代碼的可讀性呢,這裏說的是適當增長空白行,並不表明隨意增長。事實上,若是增長一些無心義的空白行反而會使代碼的可讀性變差。flex
最後,咱們一般把實體變量定義在類的頂部,這個只是咱們Java程序員的習慣操做,若是忽然在類的中間位置出現一個變量聲明會讓人以爲很奇怪。若是你想說,定義在中間是不想讓定義位置和調用位置離太遠,那麼只能說明你的類定義出現了問題。建議你看一下舊文代碼潔癖系列(三):整潔的類和函數。this
橫向格式spa
介紹完垂直格式,緊接着天然要來介紹一下它的兄弟,橫向格式。或許你會問爲何不叫水平格式,個人回答是:也能夠叫水平格式,只要你喜歡。橫向格式也是須要間隔和靠近的,這裏的間隔主要是爲了起到強調的效果。舉個例子。.net
int lineSize = line.length();
這裏等號兩邊的空格分別是爲了強調左右兩邊的元素。橫向格式另外一個比較重要的元素就是縮進,Java程序對縮進沒有強制性要求,而Python程序對縮進的要求很是嚴格,稍有不慎,執行的結果就會不一樣。可是Java程序員也要注意縮進,由於咱們的代碼是層級關係,而縮進能夠幫咱們快速理清層級關係。
最後,橫向代碼格式對每行代碼長度是有要求的,若是代碼過長,那麼在閱讀的時候就須要左右滑動,而這個操做實際上是不受人喜歡的。雖然如今代碼編輯器可顯示的長度變大了,但咱們仍是習慣每行代碼最多100個字符。
團隊的規則
每個優秀的團隊都已一套屬於本身的代碼格式要求,有些是特定的,有些是使用公共的。咱們team所用的代碼規範就是Google的代碼規範,阿里的代碼規範也是比較被你們承認的。這裏給你們一個小福利,後臺回覆【代碼規範】,就能夠得到一份阿里的Java開發手冊。
本文分享自微信公衆號 - 代碼潔癖患者(Jackeyzhe2018)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。