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

魚(yú)小皮
哥,我好難過(guò)。
怎么肥四?

老百

魚(yú)小皮
這不是剛換了一家實(shí)習(xí)公司么,這家公司要求每次提交代碼都要其他同事來(lái)審核。
哦,你說(shuō)的是 CR(code review 代碼審查)呀,一般新人的代碼都會(huì)讓老員工看一看,保證沒(méi)問(wèn)題才能發(fā)布。

老百

魚(yú)小皮
對(duì),但是我發(fā)現(xiàn)同事們都不愛(ài)看我的代碼,導(dǎo)致我的代碼一直無(wú)法發(fā)布。
還有這種事?我來(lái)看看你的代碼。

老百


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

老百

魚(yú)小皮
我不對(duì)勁?
來(lái)來(lái)來(lái),你看看,這特喵寫的都是啥???

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

魚(yú)小皮
這是我在公司寫的的第一段代碼,有啥問(wèn)題?
第一次能寫出這樣的代碼真是太強(qiáng)了,你看看,這代碼格式錯(cuò)落有致、風(fēng)格迥異,邏輯還有毛病,應(yīng)該把 “我好帥” 改成 “小東西長(zhǎng)得真別致”。

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

魚(yú)小皮
這段代碼怎么了,是我英文單詞拼錯(cuò)了么?
你的英語(yǔ)很好,但是這么平平平平平平平平平平平的代碼我還是第一次見(jiàn),你鍵盤上的大寫鍵壞掉了么?

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

魚(yú)小皮
這段代碼運(yùn)行的老好了,沒(méi)毛病吧?
小皮,你 真 是 創(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";
}

魚(yú)小皮
這行代碼沒(méi)毛病啊,就是定義一個(gè)字符串變量而已。
小皮,你的換行鍵是不是也壞了?你看這行代碼它又長(zhǎng)又寬~

老百
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;
}

魚(yú)小皮
這段代碼怎么了?花了好久寫出來(lái)的干貨??!
是挺干,簡(jiǎn)直比撒哈拉沙漠還干。加上一行注釋有這么難么?

老百
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?行
}
你是要攀登珠穆朗瑪峰么?一個(gè)文件里寫那么多行代碼?

老百

魚(yú)小皮
這段程序邏輯太復(fù)雜,沒(méi)辦法嘛。
07 復(fù)讀機(jī)
代碼如下:
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++;
??}
}
你這重復(fù)代碼也太多了吧!要把相同代碼抽成獨(dú)立的函數(shù)。圖一時(shí)方便,以后改代碼累死你。人類的本質(zhì)就是復(fù)讀機(jī)?

老百

魚(yú)小皮
阿巴阿巴阿巴。
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)?{
????...
??}
}
小皮,你見(jiàn)過(guò)重慶立交橋么?

老百
重慶號(hào)稱最容易“迷路”的城市。

重慶旅游的游客們來(lái)自五湖四海,很多朋友旅游之前都做足了功課,但是一旦來(lái)到重慶就懵逼了。因?yàn)橐郎蕉ǖ牡匦?,使得重慶的道路變得異常復(fù)雜,滿城都是各種高架立交橋,并且重慶的立交橋和我們平時(shí)理解的立交橋不太一樣,重慶的立交橋上,有三四層道路,而且每一層道路到達(dá)的地方都不一樣,如果不小心錯(cuò)過(guò)了一個(gè)路口,沒(méi)有個(gè)兩個(gè)小時(shí)是找不到原來(lái)的路的。

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

老百

魚(yú)小皮
啥是代碼規(guī)范?寫個(gè)代碼還要規(guī)范?
當(dāng)然,無(wú)規(guī)矩不成方圓。

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

魚(yú)小皮
聽(tīng)起來(lái)好麻煩,這樣我寫代碼不就要慢死了?
你呀,還是太年輕。代碼規(guī)范在團(tuán)隊(duì)項(xiàng)目開(kāi)發(fā)中至關(guān)重要!

老百
代碼規(guī)范的作用
遵守代碼規(guī)范能為團(tuán)隊(duì)帶來(lái)很多好處,比如:
1. 統(tǒng)一的代碼風(fēng)格能夠提升團(tuán)隊(duì)成員閱讀代碼的效率。
2. 統(tǒng)一規(guī)范有助于合作開(kāi)發(fā)和交接代碼,提升團(tuán)隊(duì)的氛圍。
3. 每個(gè)人都有不同的編碼習(xí)慣,比較霸道的人可能因?yàn)榭床粦T其他人的代碼而直接上手修改,會(huì)產(chǎn)生很多沒(méi)有意義的代碼變更,有時(shí)甚至?xí)绊戫?xiàng)目的運(yùn)行(比如名稱改錯(cuò)了)。而統(tǒng)一規(guī)范大大消除了這種隱患。
4. 有利于代碼的維護(hù),提升團(tuán)隊(duì)和項(xiàng)目的穩(wěn)定性。

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

老百

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

老百
優(yōu)秀的代碼規(guī)范
人數(shù)越多、項(xiàng)目越大的團(tuán)隊(duì),其代碼規(guī)范往往更加優(yōu)秀,更經(jīng)得起考驗(yàn),具有更大的參考和學(xué)習(xí)價(jià)值。
比如 Java 語(yǔ)言的代碼規(guī)范可以參考谷歌的 google-java-style 和阿里的 Java 開(kāi)發(fā)手冊(cè)。

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

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

老百
關(guān)注公眾號(hào)Java技術(shù)?;貜?fù):GG規(guī)范,可以閱讀中文版谷歌 Java 代碼規(guī)范哦~?
喜歡本文的話,歡迎分享給身邊的同學(xué) ??
告別辣雞代碼,從我做起!






關(guān)注Java技術(shù)??锤喔韶?/strong>



