牛批!竟有如此優(yōu)雅的代碼。。
01
世上竟有如此優(yōu)雅的代碼!

魚小皮
哥,我好難過。
怎么肥四?

老百

魚小皮
這不是剛換了一家實習公司么,這家公司要求每次提交代碼都要其他同事來審核。
哦,你說的是 CR(code review 代碼審查)呀,一般新人的代碼都會讓老員工看一看,保證沒問題才能發(fā)布。

老百

魚小皮
對,但是我發(fā)現同事們都不愛看我的代碼,導致我的代碼一直無法發(fā)布。
還有這種事?我來看看你的代碼。

老百


小皮呀,我知道為什么他們不想看你的代碼了,你有問題!

老百

魚小皮
我不對勁?
來來來,你看看,這特喵寫的都是啥啊?

老百
代碼鑒賞大會
01 小東西長得真別致
代碼如下:
public?static?void?main(String??args[])?
??{
?if?(?1==?1)?{
???System.out.println(????"我好帥");
?????}?else?
?{
System.out.println("我不帥"??);
?}?System.out.println(?"hello?world"??);}

魚小皮
這是我在公司寫的的第一段代碼,有啥問題?
第一次能寫出這樣的代碼真是太強了,你看看,這代碼格式錯落有致、風格迥異,邏輯還有毛病,應該把 “我好帥” 改成 “小東西長得真別致”。

老百
02 飛機場
代碼如下:
public?class?ilovecodeandplayandsleep()?{
??final?int?howmanyhourscanisleep?=?24;
}

魚小皮
這段代碼怎么了,是我英文單詞拼錯了么?
你的英語很好,但是這么平平平平平平平平平平平的代碼我還是第一次見,你鍵盤上的大寫鍵壞掉了么?

老百
03 創(chuàng) 作 鬼 才
代碼如下:
public?class?To?2Simple?{
??int?user年齡;
??String?user資產;
??String?user的?;
}

魚小皮
這段代碼運行的老好了,沒毛病吧?
小皮,你 真 是 創(chuàng) 作 鬼 才!變量名帶上中文就算了,還能加表情?

老百
04?大碗寬面
代碼如下:
public?class?Noodle?{
??private?static?final?String?description?=?"xxxxxxx"?+?1/1?+?"yyyyyy"?+?2/2?+?"zzzzzz"?+?"zzzzzz"?+?"zzzzzzz"?+?String.format("%s?%s?%s?%s?%s?%s?%s?%s",?"1",?"2",?"3",?"4",?"5",?"6",?"7",?"8")?+?"goodgoodgood"?+?"hhhhhhhhhhhhhhhhhhhhh233333333333";
}

魚小皮
這行代碼沒毛病啊,就是定義一個字符串變量而已。
小皮,你的換行鍵是不是也壞了?你看這行代碼它又長又寬~

老百
05 撒哈拉沙漠
代碼如下:
protected?final?boolean?tryAcquire(int?acquires)?{
????return?nonfairTryAcquire(acquires);
}
final?boolean?nonfairTryAcquire(int?acquires)?{
????final?Thread?current?=?Thread.currentThread();
????int?c?=?getState();
????if?(c?==?0)?{
????????if?(compareAndSetState(0,?acquires))?{
????????????setExclusiveOwnerThread(current);
????????????return?true;
????????}
????}
????else?if?(current?==?getExclusiveOwnerThread())?{?
????????int?nextc?=?c?+?acquires;
????????if?(nextc?0)?
????????????throw?new?Error("Maximum?lock?count?exceeded");
????????setState(nextc);
????????return?true;
????}
????return?false;
}

魚小皮
這段代碼怎么了?花了好久寫出來的干貨啊!
是挺干,簡直比撒哈拉沙漠還干。加上一行注釋有這么難么?

老百
06 珠穆朗瑪峰
代碼如下:
public?static?void?main(String[]?args)?{
??int?a?=?1;
??a++;
??a++;
????a++;
??a++;
??a++;
??a++;
??a++;
??a++;
??a++;
??a++;a++;a++;
??a++;
??a++;
??a++;
??a++;a++;a++;
??a++;a++;a++;a++;
??a++;a++;a++;a++;
??a++;a++;a++;a++;a++;
??a++;
??a++;a++;a++;
??a++;a++;a++;a++;
??a++;a++;a++;
??a++;a++;a++;
??a++;a++;a++;a++;
??a++;a++;a++;a++;
??a++;a++;a++;
??a++;a++;
??a++;a++;
??a++;a++;a++;a++;a++;
??a++;a++;a++;
??a++;a++;a++;a++;
??a++;a++;a++;a++;
??a++;a++;a++;a++;a++;
??a++;a++;a++;a++;a++;a++;
??a++;a++;a++;a++;
??a++;a++;a++;
??a++;a++;a++;
??a++;a++;a++;
??a++;a++;a++;a++;
??a++;a++;a++;
??a++;a++;a++;
??...?省去?10000?行
}
你是要攀登珠穆朗瑪峰么?一個文件里寫那么多行代碼?

老百

魚小皮
這段程序邏輯太復雜,沒辦法嘛。
07 復讀機
代碼如下:
public?static?void?main()?{
??int?a?=?1;
??if?(a?==?1)?{
????System.out.println("我很帥");
????System.out.println("我很帥呀");
????a++;
??}?else?if?(a?==?2)?{
????System.out.println("我很帥");
????System.out.println("我很帥呀");
????a++;
??}?else?(a?==?3)?{
????System.out.println("我很帥");
????System.out.println("我很帥呀");
????a++;
??}
}
你這重復代碼也太多了吧!要把相同代碼抽成獨立的函數。圖一時方便,以后改代碼累死你。人類的本質就是復讀機?

老百

魚小皮
阿巴阿巴阿巴。
08?重慶立交橋
代碼如下:
public?static?void?main()?{
??int?a?=?0;
??int?b?=?0;
??int?c?=?0;
??if?(a?==?1)?{
????if?(b?==?2)?{
??????if?(c?==?3)?{
????????if?(a?==?2)?{
??????????...
????????}
??????}?else?if?(c?==?2)?{
????????...
??????}
????}
??}?else?if?(a?==?2)?{
????if?(b?==?2)?{
??????if?(c?==?1)?{
????????...
??????}?else?if?(c?==?2)?{
????????...
??????}
????}
??}?else?if?(a?==?3)?{
????...
??}?else?if?(a?==?4)?{
????...
??}
}
小皮,你見過重慶立交橋么?

老百
重慶號稱最容易“迷路”的城市。

重慶旅游的游客們來自五湖四海,很多朋友旅游之前都做足了功課,但是一旦來到重慶就懵逼了。因為依山而建的地形,使得重慶的道路變得異常復雜,滿城都是各種高架立交橋,并且重慶的立交橋和我們平時理解的立交橋不太一樣,重慶的立交橋上,有三四層道路,而且每一層道路到達的地方都不一樣,如果不小心錯過了一個路口,沒有個兩個小時是找不到原來的路的。

魚小皮
原來我的代碼這么爛啊,怪不得大家都不愿意看。要怎么樣才能寫出讓別人看得舒服的代碼呢?
想要寫出優(yōu)雅的代碼,首先要學習下代碼規(guī)范。

老百

魚小皮
啥是代碼規(guī)范?寫個代碼還要規(guī)范?
當然,無規(guī)矩不成方圓。

老百
什么是代碼規(guī)范?
代碼規(guī)范是人為規(guī)定的對代碼風格、命名、注釋的統一要求。通常在項目啟動開發(fā)前,都要為團隊制定一套代碼規(guī)范,比如代碼統一縮進兩格、使用駝峰式命名、必須在每個文件開頭添加作者和創(chuàng)建日期注釋等。

魚小皮
聽起來好麻煩,這樣我寫代碼不就要慢死了?
你呀,還是太年輕。代碼規(guī)范在團隊項目開發(fā)中至關重要!

老百
代碼規(guī)范的作用
遵守代碼規(guī)范能為團隊帶來很多好處,比如:
1. 統一的代碼風格能夠提升團隊成員閱讀代碼的效率。
2. 統一規(guī)范有助于合作開發(fā)和交接代碼,提升團隊的氛圍。
3. 每個人都有不同的編碼習慣,比較霸道的人可能因為看不慣其他人的代碼而直接上手修改,會產生很多沒有意義的代碼變更,有時甚至會影響項目的運行(比如名稱改錯了)。而統一規(guī)范大大消除了這種隱患。
4. 有利于代碼的維護,提升團隊和項目的穩(wěn)定性。

魚小皮
那我自己一個人寫代碼,不就可以為所欲為了?
當然不行!如果不遵循代碼規(guī)范,隨意命名、不寫注釋,那么很快你就讀不懂自己之前寫的代碼了(程序員都覺得自己從前寫的代碼是辣雞,不是么)。遵循代碼規(guī)范不僅為了團隊,也為了幫助我們養(yǎng)成好習慣,成為更專業(yè)的軟件工程師!

老百

魚小皮
百哥,你這餅畫的真好,那我應該怎么學習代碼規(guī)范呢?
不同的團隊,代碼規(guī)范也不同。但是有些知名公司制定的代碼規(guī)范,非常優(yōu)秀和專業(yè),被很多公司和程序員學習、參考及使用。

老百
優(yōu)秀的代碼規(guī)范
人數越多、項目越大的團隊,其代碼規(guī)范往往更加優(yōu)秀,更經得起考驗,具有更大的參考和學習價值。
比如 Java 語言的代碼規(guī)范可以參考谷歌的 google-java-style 和阿里的 Java 開發(fā)手冊。

《阿里巴巴 Java 開發(fā)手冊》
《阿里巴巴 Java 開發(fā)手冊》不僅制定了 Java 編程的規(guī)約,還有異常日志規(guī)約、MySQL 規(guī)約、工程規(guī)約,非常地全面,推薦學習 Java 的同學閱讀和使用。
關注公眾號Java技術棧回復手冊獲取最新高清完整版。

魚小皮
爽死了,我這就去學習代碼規(guī)范,以后讓同事愛上看我的代碼!
想多了,沒有程序員喜歡看代碼。

老百
關注公眾號Java技術棧回復:GG規(guī)范,可以閱讀中文版谷歌 Java 代碼規(guī)范哦~?
喜歡本文的話,歡迎分享給身邊的同學 ??
告別辣雞代碼,從我做起!






關注Java技術棧看更多干貨



