開門見山地說吧,在逛 GitHub 的時候,發現了一個很是有意思的項目,地址以下所示:javascript
名叫「垃圾代碼書寫準則」,瞧這名字,我真的是服了。做者也是良苦用心,從反面教材的角度來闡述正確書寫代碼格式的重要性。做者使用 JavaScript 編寫的代碼示例,我把它重製成了 Java 版,而且用我本身的語言風格翻譯成了中文,但願小夥伴們可以喜歡。git
命名越短,就須要越多的時間去思考代碼邏輯等問題。程序員
Good 👍🏻github
int a = 42;
複製代碼
Bad 👎🏻算法
int age = 42;
複製代碼
爲風格不統一干杯。數據庫
Good 👍🏻設計模式
int wWidth = 640;
int w_height = 480;
複製代碼
Bad 👎🏻markdown
int windowWidth = 640;
int windowHeight = 480;
複製代碼
反正沒人能讀懂你的代碼。網絡
Good 👍🏻
int cdr = 700;
複製代碼
Bad 👎🏻
註釋應該包含一些「爲何」,而不是一些「是什麼」。若是代碼連是「什麼」都表達不清楚,那代碼也太爛了。
// 700ms 的數量是從 UX A/B 測試結果中獲得的一個經驗值。
// @查看: <詳細解釋 700 的一個連接>
int callbackDebounceRate = 700;
複製代碼
若是你的母語是英語,那麼請忽略這條準則。
Good 👍🏻
// Закриваємо модальне віконечко при виникненні помилки.
toggleModal(false);
複製代碼
Bad 👎🏻
// 隱藏錯誤彈窗
toggleModal(false);
複製代碼
PS:若是英語書寫能力不是很強的話,建議仍是用母語吧。畢竟說清楚總比說不清楚要強。
再次爲風格不統一干杯。
Good 👍🏻
String [] i1 = {"沉", "默", "王", "二"};
String i2 [] = {"沉", "默", "王", "三"};
複製代碼
Bad 👎🏻
String [] wanger = {"沉", "默", "王", "二"};
String wangsan [] = {"沉", "默", "王", "三"};
複製代碼
Good 👍🏻
IntStream.range(1, 5).boxed().map(i -> { System.out.print("Happy Birthday "); if (i == 3) return "dear NAME"; else return "to You"; }).forEach(System.out::println);
複製代碼
Bad 👎🏻
for (int i = 1; i < 5; i++) {
System.out.println("Happy Birthday " + (i == 3 ? "dear NAME" : "to you"));
}
複製代碼
不管何時發現錯誤,都沒有必要讓其餘人知道。
Good 👍🏻
try {
// 意料以外的狀況。
} catch (error) {
// tss... 🤫
}
複製代碼
Bad 👎🏻
try {
// 意料以外的狀況。
} catch (error) {
// and/or
logError(error);
}
複製代碼
全球化的原則。
Good 👍🏻
int x = 5;
void multi() {
x = x * 2;
}
multi(); // 如今 x 是 10
複製代碼
Bad 👎🏻
int x = 5;
int multi(int num) {
return num * 2;
}
x = multi(x); // 如今 x 是 10
複製代碼
萬一之後用了呢?以備不時之需。
Good 👍🏻
int sum(int a, int b, int c) {
int timeout = 1300;
int result = a + b;
return a + b;
}
複製代碼
Bad 👎🏻
int sum(int a, int b) {
return a + b;
}
複製代碼
Good 👍🏻
// 享受便捷的快樂
List list = new ArrayList();
list.add("沉默王二");
list.add(18);
複製代碼
Bad 👎🏻
List<String> nameList = new ArrayList<String>();
// 編譯出錯
nameList.add(18);
複製代碼
看起來更嚴謹,其實不少餘。
Good 👍🏻
Integer multi(Object num) {
if (!(num instanceof Integer)) {
return null;
} else if (num != null) {
return (Integer) num * 2;
}
return null;
}
複製代碼
Bad 👎🏻
Integer multi(Object num) {
if (num instanceof Integer) {
return (Integer) num * 2;
}
return null;
}
複製代碼
Good 👍🏻
void someMethod(int a, int b, int c) {
if (a > 0) {
if (b > 0) {
if (c > 0) {
int result = a / b / c;
}
}
}
}
複製代碼
Bad 👎🏻
void someMethod1(int a, int b, int c) {
if (a < 0 || b < 0 || c < 0) {
return;
}
int result = a / b / c;
}
複製代碼
良莠不齊乃幸福本源。
Good 👍🏻
String [] wanger = {"沉",
"默", "王", "二"};
String [] wangsan = {"沉", "默", "王", "三"};
Arrays.asList(wanger).stream().
forEach(System.out::println);
Arrays.asList(wangsan).
stream().
forEach(System.out::println);
複製代碼
Bad 👎🏻
String [] wanger = {"沉", "默", "王", "二"};
String [] wangsan = {"沉", "默", "王", "三"};
Arrays.asList(wanger)
.stream()
.forEach(System.out::println);
Arrays.asList(wangsan)
.stream()
.forEach(System.out::println);
複製代碼
不要把代碼邏輯分紅可讀的部分。
代碼測試是測試工程師的事,關我屁事。
爲所欲爲地編寫代碼,特別是在一個團隊中有多個開發人員的狀況下,我崇尚「自由」。
從一開始就不要。
代碼儘管已經廢棄了,註釋掉就好了,不必刪掉。
好了,小夥伴們還有須要補充的嗎?
喜歡逛 GitHub 的小夥伴們能夠點擊下面的地址跳轉過去查看,我已經提交了:
另外再推薦一個項目,裏面包含了 Java 程序員常讀的書單,幫你構建最強知識體系,機不可失時再也不來。但不限於 Java,包括設計模式、計算機網絡、操做系統、數據庫、數據結構與算法、大數據、架構、管理等等。
小夥伴們也能夠去 star 下。週四加油,記得點贊,重拾咱們的傳統美德!