www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]最近阿里巴巴的 Java 開發(fā)手冊出了新版(可直接到 github alibaba-p3c 上獲取相關(guān)資源哦),我就跟著這個事情說一下我對開發(fā)規(guī)范的理解吧。 提起開發(fā)規(guī)范,我印象中最深的就是讀研究生期間,帶我的大牛師兄某導(dǎo)對我的要求。當(dāng)時是開發(fā)一款 B/S 的 3D 渲染引擎


最近阿里巴巴的 Java 開發(fā)手冊出了新版(可直接到 github alibaba-p3c 上獲取相關(guān)資源哦),我就跟著這個事情說一下我對開發(fā)規(guī)范的理解吧。

提起開發(fā)規(guī)范,我印象中最深的就是讀研究生期間,帶我的大牛師兄某導(dǎo)對我的要求。當(dāng)時是開發(fā)一款 B/S 的 3D 渲染引擎,其中 Web 部分由我負(fù)責(zé),在大師兄在對我進(jìn)行 code review 的過程中,對我提出了“嚴(yán)厲”的批評(也一直很感謝他當(dāng)時的嚴(yán)格要求),原因不是別的,就是我開發(fā)的網(wǎng)頁中有一部分是文字介紹,里面的標(biāo)點符號是中英文混用,且代碼也不規(guī)范,比如縮進(jìn)不一致、該有的空格沒有等等問題。就是從那個時候起,我對代碼規(guī)范非常重視。這對后來自己寫畢業(yè)論文等等方面也起到了良好的促進(jìn)作用,因為導(dǎo)師對這塊要求也相對嚴(yán)格。


回到代碼規(guī)范這件事情上,好的代碼讀起來真的是賞心悅目,當(dāng)然自己也一直在追求寫出好的代碼。代碼規(guī)范中的 code style 只是其中最簡單的一種,上述提到的 Java 開發(fā)手冊也對這部分做出了嚴(yán)格的說明,但實際上能做到的人也不多。按道理,這部分也是最容易做到的一種,因為有模板,直接遵守即可。記得有一部電視劇(叫啥來著?)講的就是一堆情侶因為糾結(jié)到底是用空格還是 tab 鍵(或者是 Vim 和 Emacs)分手,哈哈這當(dāng)然是一個笑話。不過在一個 team 里保持統(tǒng)一的代碼風(fēng)格還是有必要的,畢竟你寫的代碼不是只有你一個人看,在不同的終端,不同的編輯器來講空格和 tab 可能顯示效果都不一樣,也就影響了閱讀體驗。

開發(fā)規(guī)范真的很重要

(圖 1. hackthon 團隊合影)


對于代碼規(guī)范來講,我也希望通過自己的努力去感染身邊的人。比如之前在宜信的 hackthon,我就組隊發(fā)起了一個叫 “code review advisor” 項目,實現(xiàn)的目的其實也很簡單,就是讓大家在預(yù)先統(tǒng)一的規(guī)范下編碼,如果有違反規(guī)范的,直接以 Comment 形式告訴代碼提交者需要修改。

開發(fā)規(guī)范真的很重要

圖 2. hackthon 項目截圖)


后來,我到了大疆,又要求 team 同學(xué)嚴(yán)格遵守規(guī)范,并且使用了一些技術(shù)手段完全規(guī)范大家提交的代碼,對于違反相應(yīng)規(guī)則的代碼直接不讓提交和打包,當(dāng)時其實就是利用了 alibaba 對外開源的工具支持。不得不說,還是很佩服阿里巴巴對社區(qū)做的相應(yīng)貢獻(xiàn)的。

現(xiàn)在,我在阿里,發(fā)現(xiàn)現(xiàn)實就是規(guī)范其實也是一個美好的愿景,因為各種歷史等原因,其實大家的代碼并沒有按照預(yù)期的規(guī)范去執(zhí)行和實施。這應(yīng)該也是普遍的現(xiàn)狀吧。就像在其中一次交流會上,孤盡大佬說的那樣,美好愿景肯定是需要的,實現(xiàn)她,是需要大家花時間和精力去推進(jìn)的。

開發(fā)規(guī)范真的很重要

圖 3. 孤盡大佬簽名版開發(fā)手冊)


上圖是在那次交流會上,得到孤盡大佬簽名版的開發(fā)手冊(原諒我沒文化,認(rèn)不出)。下面我就以其中的一個例子來說明一下規(guī)范的好處。

public class SimpleDateFormatTest { public static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void main(String[] args) { Date now = new Date(); String printedDate = simpleDateFormat.format(now); System.out.println(printedDate); for (int i = 0; i < 10; i++) { new Thread(new Runnable() { @Override public void run() { try { Date date = simpleDateFormat.parse(printedDate); System.out.println(simpleDateFormat.format(date)); } catch (ParseException e) { e.printStackTrace(); } } }).start(); } }}


上面代碼片段就是規(guī)范中提到的 SimpleDateFormat 使用場景中一個錯誤的示例,其實就是一個線程安全的問題,跑上面代碼片段,預(yù)期輸出應(yīng)該是一個正確的字符串表達(dá)(例如 2020-04-25 15:41:34),實際過程有可能會拋異常(例如 java.lang.NumberFormatException),也可能會輸出一些奇奇怪怪的時間(例如 0015-03-25 15:41:34),這其實都還好,因為畢竟要么異常了,要么“時間不正?!?,最要命的是可能會輸出一個正確格式的時間,只不過不是預(yù)期的,這種問題就相對很難排查了。

還有比如前面剛跨年的時候各個系統(tǒng)都爆出的時間跨年問題(yyyyYYYY 的問題),在此手冊中其實也都有說明。所以,其實類似的規(guī)范多多了解更好。

特別推薦一個分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:

開發(fā)規(guī)范真的很重要

開發(fā)規(guī)范真的很重要

長按訂閱更多精彩▼

開發(fā)規(guī)范真的很重要

如有收獲,點個在看,誠摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉
關(guān)閉