日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

2016年底,阿里巴巴公開了其在內(nèi)部使用的JAVA編程規(guī)范。隨后進(jìn)行了幾次版本修訂,筆者當(dāng)時看到的版本為v1.0.2版。下載地址可以在其官方社區(qū)—— 云棲社區(qū) 找到。

筆者作為一名有數(shù)年工作經(jīng)驗的Java程序員,仔細(xì)研讀了這份手冊,覺得是一份不可多得的好材料。正如阿里巴巴在發(fā)布時所說,“阿里巴巴集團(tuán)推出的《阿里巴巴Java開發(fā)手冊(正式版)》是公司近萬名開發(fā)同學(xué)集體智慧的結(jié)晶,以開發(fā)視角為中心,詳細(xì)列舉了如何開發(fā)更加高效、更加容錯、更加有協(xié)作性,力求知其然,更知其不然。結(jié)合正反例,讓Java開發(fā)者能夠提升協(xié)作效率、提高代碼質(zhì)量。” 同時,阿里巴巴也期望這套Java統(tǒng)一規(guī)范標(biāo)準(zhǔn)將有助于提高行業(yè)編碼規(guī)范化水平,幫助行業(yè)人員提高開發(fā)質(zhì)量和效率、大大降低代碼維護(hù)成本。

其實早在多年前,google就已經(jīng)把公司內(nèi)部采用的所有語言的編碼規(guī)范(其稱為 Style Guide )都開源在Github上。這份清單中包括了 C++ 、 Objective-C 、 Java 、 Python 、 R 、 Shell 、 html/css 、 JavaScript 、 AngularJS 、 Common Lisp 、 Vimscript 等語言的編程規(guī)范。并且Google還發(fā)布了一個用于檢查樣式合規(guī)性的工具 cpplint 以及在Emacs中使用Google編程樣式的配置文件 google-c-style.el 。看來Google中Emacs粉比Vim粉要強(qiáng)勢的多。

Google為什么要發(fā)布這樣的Style Guide呢?因為它認(rèn)為幾乎所有的開源項目都需要有一組約定來規(guī)范如何編寫代碼。如果項目中的代碼都能保持一致的風(fēng)格,那么即使代碼再多也會很容易的被人理解。

Google的這份編程規(guī)范包含了很多方面,從”對變量使用camelCase命名法”到”絕不要使用全局變量”到”絕不允許例外“等。其Java編程規(guī)范包含7大部分,分別為介紹、源文件基本要求、源文件結(jié)構(gòu)、格式化、命名、編程實踐和Javadoc。每一部分又細(xì)分為很多子條目。如果采取條規(guī)范的原因不是很容易理解,都會配有相應(yīng)的示例或者引用文章。

由于Google的這份編程規(guī)范目前只有英文版本,所以在中國的程序員中只有少部分人知道它的存在。并且只有更少的團(tuán)隊在真正的應(yīng)用它,其中就包括我的團(tuán)隊。我們團(tuán)隊根據(jù)Google的 Java style guide 也演化出了自己的團(tuán)隊版本,放置在團(tuán)隊共享wiki上供大家隨時查閱。我們根據(jù)自身的項目特點豐富了”編程實踐”里的內(nèi)容,并且新加入一個章節(jié)來描述編寫Java代碼的一些原則,比如簡潔代碼、組合優(yōu)于繼承、stream優(yōu)于for循環(huán)等。

我想阿里巴巴發(fā)布的Java開發(fā)手冊之所以叫做”開發(fā)手冊”,而不是像Google那樣叫做“Style Guide(樣式風(fēng)格)”,是因為它不僅僅局限于style guide這一方面,而是以Java開發(fā)者為中心視角,劃分為編程規(guī)約、異常日志規(guī)約、MySQL規(guī)約、工程規(guī)約、安全規(guī)約五大塊,再根據(jù)內(nèi)容特征,細(xì)分成若干二級子目錄。根據(jù)約束力強(qiáng)弱和故障敏感性,規(guī)約依次分為強(qiáng)制、推薦、參考三大類。

該開發(fā)手冊中的每一條都值得了解。限于篇幅原因,這里只列出”編程規(guī)約“中有感受的幾條來評述一下。

阿里是這樣要求 JAVA 程序員的,你們都知道么?

 

命名規(guī)約的第15條描述了在Service/DAO層對于資源的操作的命名規(guī)范。這一條的參考價值極大,因為我所有待過的團(tuán)隊對于這一點都沒有明顯的約束,每個團(tuán)隊都有五花八門的實現(xiàn)。如果能遵守這一點,那么我們在操作資源時就會減少一些困擾。

阿里是這樣要求 JAVA 程序員的,你們都知道么?

 

這是常量定義的第2條。從這一點可以看出阿里巴巴對代碼可讀性的細(xì)節(jié)扣的很嚴(yán)格。我也很贊同這一點。代碼只需編寫一次,而會被查看無數(shù)次,所以要力爭在第一次編寫的時候盡可能少的引入歧義。

阿里是這樣要求 JAVA 程序員的,你們都知道么?

 

格式規(guī)約的第1條終于終結(jié)了括號之爭。這一條需要強(qiáng)制遵守,那么左大括號換行一派則被徹底排除在阿里巴巴之外。有人說不推薦左大括號換行,可以減少行數(shù),增加單個屏幕可以顯示的代碼行數(shù)。而有的人反駁說現(xiàn)在屏幕已經(jīng)足夠大,不換行則破壞了對稱之美。其實對于我來說兩種格式都有各自的好處,我都可以接受,只要團(tuán)隊能夠堅持使用其中之一即可。

阿里是這樣要求 JAVA 程序員的,你們都知道么?

 

使用空格代替tab字符進(jìn)行縮進(jìn)已經(jīng)成為了編程界的共識。其主要原因是不同的平臺甚至不同的編輯器下tab字符的長短是不一樣的。不過Google在其《java style guide》中規(guī)定縮進(jìn)為2個空格,而阿里巴巴約定為4個空格。由于4個空格的縮進(jìn)比2個空格的縮進(jìn)長一倍,所以如果在代碼嵌套過深的情況下可能會很快超過單行最多字符數(shù)(阿里巴巴規(guī)定為120個)的限制。不過這個問題可以從另一個方面進(jìn)行思考,如果由于縮進(jìn)的原因?qū)е聠涡凶址麛?shù)超標(biāo),這很可能是代碼設(shè)計上有壞味道而導(dǎo)致嵌套過深。所以最好從調(diào)整代碼結(jié)構(gòu)的方面下手。

阿里是這樣要求 JAVA 程序員的,你們都知道么?

 


阿里是這樣要求 JAVA 程序員的,你們都知道么?

 

關(guān)于換行,Google并沒有給出明確的要求,而阿里巴巴則給出了強(qiáng)制性的要求。Google特別提示可以通過一些重構(gòu)手法來減少單行字符長度從而避免換行,這一點我頗為認(rèn)同。關(guān)于參數(shù),很多方法調(diào)用超過120個字符需要換行,這暴露除了過長參數(shù)列的代碼壞味道,解決方式之一就是使用重構(gòu)手法的Replace Parameter With Method的方式把一次方法調(diào)用化為多次方法調(diào)用,或者使用Introduce Parameter Object手法創(chuàng)造出參數(shù)對象并進(jìn)行傳遞。

阿里是這樣要求 JAVA 程序員的,你們都知道么?

 

這是《Effective Java》以及其他文章中經(jīng)常提及的優(yōu)化方式,而且面試初級Java工程師時幾乎是一個必考點。其實不僅是在循環(huán)體內(nèi),所有需要進(jìn)行多次字符串拼接的地方都應(yīng)該使用StringBuilder對象。

阿里是這樣要求 JAVA 程序員的,你們都知道么?

 

這其實就是經(jīng)典的原則‘Principle of least privilege’ 的體現(xiàn)。我們必須遵循這一原則,但不知為何阿里巴巴將其級別列為“推薦”。

阿里是這樣要求 JAVA 程序員的,你們都知道么?

 

編寫代碼時,對參數(shù)進(jìn)行校驗是不可避免的。詳細(xì)說又扯到“防御式編程”和“契約式編程”的話題上。這兩項之所以列為參考,并沒有強(qiáng)迫大家遵守。

阿里是這樣要求 JAVA 程序員的,你們都知道么?

 

看到這一條我已經(jīng)笑出來了。這一條說的很好,注釋是用來闡述問題的,如果看了注釋還一頭霧水,那么這樣的注釋不要也罷。使用中文沒什么可丟人的,解決問題才是王道。

阿里是這樣要求 JAVA 程序員的,你們都知道么?

 

阿里巴巴對該條的說明非常到位。其實我們團(tuán)隊在編寫代碼時默認(rèn)是沒有任何注釋的,因為我們追求的是self-explanatory methods。即代碼本身已經(jīng)就能說明它的用途。只有在很少的情況下需要添加注釋。

編程規(guī)約的第九部分都是很好的tips,值得去了解和學(xué)習(xí)。

除了編程規(guī)約之外,日志規(guī)約、MySQL規(guī)約、工程規(guī)約和安全規(guī)約也都有極高的參考價值,這也是比Google的Java Style Guide出色的地方。這里就不再評述了。

阿里巴巴公布這個Java開發(fā)手冊絕對是值得贊賞的事情。最后我也想給其提幾點建議:

建議使用公開wiki的方式發(fā)布該手冊,而不是采用pdf的方式。因為如果像google那樣是公開wiki方式的話,可以方便大家參與修正和改進(jìn),并且可以看到版本歷史。

該手冊并沒有明確的版權(quán)許可,只是在頁腳處加入了“禁止用于商業(yè)用途,違者必究”的字樣。Google的style guide的版權(quán)為CC-By 3.0 License,建議阿里巴巴能夠指明其版權(quán)。

手冊中的部分示例代碼并沒有遵守其列出的編程規(guī)約,有點打臉之嫌。比如以下示例代碼:

Iterator<String> it = a.iterator();

while(it.hasNext()){

String temp = it.next();

if(刪除元素的條件){

it.remove();

}

}

其while和if關(guān)鍵字與小括號之間并沒有空格,違反了該手冊中3. 【強(qiáng)制】if/for/while/switch/do 等保留字與左右括號之間都必須加空格。這一規(guī)則。

集合處理中可以多推薦一些Java8的集合操作方法。

有些名詞沒有過多解釋,比如很多人可能都不知道什么叫一方庫、二方庫。

希望除了這份開發(fā)手冊以外,阿里巴巴也可以推出對應(yīng)的checkstyle配置文件以及Intellij、Eclipse的配置文件。畢竟格式化這些事都可以交由IDE來解決,通過在構(gòu)建時使用checkstyle插件也可以防止不合規(guī)的代碼遷入到倉庫,從源頭上保證代碼樣式的一致性。

最后,希望這份Java開發(fā)手冊可以持續(xù)改進(jìn),吸納百家之長,成為每個入門程序員必看的手冊。

原文鏈接:https://www.toutiao.com/i6459605525188313614/

喜歡對你有幫助的話記得加個關(guān)注不迷路哦

還有關(guān)注我私信回復(fù)【資料】可以領(lǐng)取到一些個人收集的面試及電子書資料,或許對你有幫助!

阿里是這樣要求 JAVA 程序員的,你們都知道么?

 

 

分享到:
標(biāo)簽:阿里
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達(dá)人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定