當(dāng)前位置:首頁 > 公眾號(hào)精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]1、引言: 這個(gè)標(biāo)準(zhǔn)是衡量代碼本身的缺陷,也是衡量一個(gè)研發(fā)人員本身的價(jià)值。華為作為一家全球化的 IT 公司,十幾萬員工,無論是人事管理,還是代碼管理,都是一件不容易的事情,沒有規(guī)范的約束,想想都是件可怕的事情。下面挑選了一些網(wǎng)上流傳的編程規(guī)范,一

1、引言:

這個(gè)標(biāo)準(zhǔn)是衡量代碼本身的缺陷,也是衡量一個(gè)研發(fā)人員本身的價(jià)值。華為作為一家全球化的 IT 公司,十幾萬員工,無論是人事管理,還是代碼管理,都是一件不容易的事情,沒有規(guī)范的約束,想想都是件可怕的事情。下面挑選了一些網(wǎng)上流傳的編程規(guī)范,一起來學(xué)習(xí)下,以下內(nèi)容不涉及基礎(chǔ)的語法規(guī)范(請(qǐng)見 Refer),更側(cè)重于一些編程習(xí)慣,如何提高程序的健壯性、可維護(hù)性等。(PS:以下內(nèi)容未經(jīng)官方考證,如閱讀者出現(xiàn)不適,請(qǐng)選擇立即關(guān)閉本頁 -_-||| )

2、軍規(guī)簡(jiǎn)介:

軍規(guī)一:【避免在程序中使用魔鬼數(shù)字,必須用有意義的常量來標(biāo)識(shí)?!?/span>

軍規(guī)二:【明確方法的功能,一個(gè)方法僅完成一個(gè)功能?!?/span>

軍規(guī)三:【方法參數(shù)不能超過5個(gè)】

軍規(guī)四:【方法調(diào)用盡量不要返回null,取而代之以拋出異常,或是返回特例對(duì)象(SPECIAL CASE object,SPECIAL CASE PATTERN);對(duì)于以集合或數(shù)組類型作為返回值的方法,取而代之以空集合或0長(zhǎng)度數(shù)組?!?/span>

軍規(guī)五:【在進(jìn)行數(shù)據(jù)庫(kù)操作或IO操作時(shí),必須確保資源在使用完畢后得到釋放,并且必須確保釋放操作在finally中進(jìn)行?!?/span>

軍規(guī)六:【異常捕獲不要直接catch (Exception ex) ,應(yīng)該把異常細(xì)分處理?!?/span>

軍規(guī)七:【對(duì)于if ? else if ?(后續(xù)可能有多個(gè)else if …)這種類型的條件判斷,最后必須包含一個(gè)else分支,避免出現(xiàn)分支遺漏造成錯(cuò)誤;每個(gè)switch-case語句都必須保證有default,避免出現(xiàn)分支遺漏,造成錯(cuò)誤?!?/span>

軍規(guī)八:【覆寫對(duì)象的equals()方法時(shí)必須同時(shí)覆寫hashCode()方法?!?/span>

軍規(guī)九:【禁止循環(huán)中創(chuàng)建新線程,盡量使用線程池?!?/span>

軍規(guī)十:【在進(jìn)行精確計(jì)算時(shí)(例如:貨幣計(jì)算)避免使用float和double,浮點(diǎn)數(shù)計(jì)算都是不精確的,必須使用BigDecimal或?qū)⒏↑c(diǎn)數(shù)運(yùn)算轉(zhuǎn)換為整型運(yùn)算?!?nbsp;

3、軍規(guī)說明


軍規(guī)一:【避免在程序中使用魔鬼數(shù)字,必須用有意義的常量來標(biāo)識(shí)?!?/strong>

說明:是否是魔鬼數(shù)字要基于容易閱讀和便于全局替換的原則。0、1作為某種專業(yè)領(lǐng)域物理量枚舉數(shù)值時(shí)必須定義常量,嚴(yán)禁出現(xiàn)類似NUMBER_ZERO的“魔鬼常量”。 

軍規(guī)二:【明確方法的功能,一個(gè)方法僅完成一個(gè)功能?!?/strong>

說明:方法功能太多,會(huì)增加方法的復(fù)雜度和依賴關(guān)系,不利于程序閱讀和將來的持續(xù)維護(hù),無論是方法還是類設(shè)計(jì)都應(yīng)符合單一職責(zé)原則。 

軍規(guī)三:【方法參數(shù)不能超過5個(gè)】

說明:參數(shù)太多影響代碼閱讀和使用,為減少參數(shù),首先要考慮這些參數(shù)的合理性,保持方法功能單一、優(yōu)化方法設(shè)計(jì),如果參數(shù)確實(shí)無法減少,可以將多個(gè)參數(shù)封裝成一個(gè)類(對(duì)象),同時(shí)考慮在新的類(對(duì)象)中增加相應(yīng)的行為,以期更符合OOP。 

軍規(guī)四:【方法調(diào)用盡量不要返回null,取而代之以拋出異常,或是返回特例對(duì)象(SPECIAL CASE object,SPECIAL CASE PATTERN);對(duì)于以集合或數(shù)組類型作為返回值的方法,取而代之以空集合或0長(zhǎng)度數(shù)組?!?/strong>

說明:返回null會(huì)增加不必要的空指針判斷,遺漏判斷也會(huì)導(dǎo)致嚴(yán)重的NullPointerException錯(cuò)誤。

軍規(guī)五:【在進(jìn)行數(shù)據(jù)庫(kù)操作或IO操作時(shí),必須確保資源在使用完畢后得到釋放,并且必須確保釋放操作在finally中進(jìn)行?!?/strong>

說明:數(shù)據(jù)庫(kù)操作、IO操作等需要關(guān)閉對(duì)象必須在try -catch-finally 的finally中close(),如果有多個(gè)IO對(duì)象需要關(guān)閉,需要分別對(duì)每個(gè)對(duì)象的close()方法進(jìn)行try-catch,防止一個(gè)IO對(duì)象關(guān)閉失敗其他IO對(duì)象都未關(guān)閉。推薦做法如下:

Connection jdbcConnection = null;

       Statement stmt = null;

       try

       {
            ........

       }

       catch(SQLException e)

       {
            ........

       }
 
       finally

       {
           if(stmt != null)

           {
                try
                {
                    stmt.close();
                }

                catch(SQLException e)

                {
                    logger.log(Level.WARNING,"異常說明", e);
 
                }

           }

           if(jdbcConnection != null)

           {
                try

                {
                    jdbcConnection.close();

                }

                catch(SQLException e)

                {
                    logger.log(Level.WARNING,"異常說明", e);

               }

           }

       }

軍規(guī)六:【異常捕獲不要直接 catch(Exception ex) ,應(yīng)該把異常細(xì)分處理?!?/strong>

說明:catch (Exception ex)的結(jié)果會(huì)把RuntimeException異常捕獲,RuntimeException是運(yùn)行期異常,是程序本身考慮不周而拋出的異常,是程序的BUG,如無效參數(shù)、數(shù)組越界、被零除等,程序必須確保不能拋出RuntimeException異常,不允許顯示捕獲RuntimeException異常就是為了方便測(cè)試中容易發(fā)現(xiàn)程序問題。 

軍規(guī)七:【對(duì)于if ? else if ?(后續(xù)可能有多個(gè)elseif …)這種類型的條件判斷,最后必須包含一個(gè)else分支,避免出現(xiàn)分支遺漏造成錯(cuò)誤;每個(gè)switch-case語句都必須保證有default,避免出現(xiàn)分支遺漏,造成錯(cuò)誤?!?/strong>


軍規(guī)八:【覆寫對(duì)象的equals()方法時(shí)必須同時(shí)覆寫hashCode()方法?!?/strong>

說明:equals和hashCode方法是對(duì)象在hash容器內(nèi)高效工作的基礎(chǔ),正確的覆寫這兩個(gè)方法才能保證在hash容器內(nèi)查找對(duì)象的正確性,同時(shí)一個(gè)好的hashCode方法能大幅提升hash容器效率。 

軍規(guī)九:【禁止循環(huán)中創(chuàng)建新線程,盡量使用線程池?!?/strong>


軍規(guī)十:【在進(jìn)行精確計(jì)算時(shí)(例如:貨幣計(jì)算)避免使用float和double,浮點(diǎn)數(shù)計(jì)算都是不精確的,必須使用BigDecimal或?qū)⒏↑c(diǎn)數(shù)運(yùn)算轉(zhuǎn)換為整型運(yùn)算?!?/strong>

說明:浮點(diǎn)運(yùn)算在一個(gè)范圍很廣的值域上提供了很好的近似,但是它不能產(chǎn)生精確的結(jié)果。二進(jìn)制浮點(diǎn)對(duì)于精度計(jì)算是非常不適合的,因?yàn)樗豢赡軐?.1——或者10的其它任何次負(fù)冪精確表示為一個(gè)長(zhǎng)度有限的二進(jìn)制小數(shù)。

具體案例請(qǐng)參考:浮點(diǎn)數(shù)加法引發(fā)的問題:浮點(diǎn)數(shù)的二進(jìn)制表示

http://my.oschina.net/leejun2005/blog/156793

4、有關(guān)開發(fā)效率和協(xié)作的幾點(diǎn)建議與心得體會(huì)

今天看到某同學(xué)寫給團(tuán)隊(duì)成員的一封郵件,發(fā)現(xiàn)比較通用,分享出來吧:

1. 小提交: 

把大的任務(wù)拆分成多個(gè)獨(dú)立小任務(wù),每完成小任務(wù)確保無 Bug 后就可以提交合并到主分支甚至發(fā)布;頻繁提交有利于自己把控項(xiàng)目進(jìn)度、降低風(fēng)險(xiǎn)、同其他人協(xié)作和代碼 Review ; 每天可以提交合并多次。每個(gè)小任務(wù)是 1-2 個(gè)小時(shí)可以完成的粒度,最大的一天完成。并行做多個(gè)任務(wù)的時(shí)候,優(yōu)先做最短時(shí)間能夠?qū)崿F(xiàn)的任務(wù)。

2. 命名規(guī)范: 

盡量避免無意義的字符做變量 比如 a, b, t ??梢灾鸩礁纳?,可以參考:

http://google-styleguide.googlecode.com/svn/trunk/javaguide.html

3. 避免過度設(shè)計(jì): 

能夠用簡(jiǎn)單方式實(shí)現(xiàn)的功能,不引入復(fù)雜的類,對(duì)象,避免不必要的 new 對(duì)象,避免引入不必要的泛型、線程。開發(fā)初期冗余大于抽象和依賴。避免自己重新實(shí)現(xiàn)比較通用的組件和函數(shù)。調(diào)研多種實(shí)現(xiàn)方式的時(shí)候,選用做簡(jiǎn)單的實(shí)現(xiàn)方式。盡量少寫代碼。

4. Web 工程盡量避免在應(yīng)用內(nèi)部保存“狀態(tài)”,這樣可以適應(yīng)頻繁發(fā)布、重啟無影響。

5. 善于用打日志的方式調(diào)試,在程序關(guān)鍵點(diǎn)打日志。盡量少用斷點(diǎn)方式,日志方式可以批量調(diào)試一批功能,效率相對(duì)高。

6. 避免一屏顯示不下的超大函數(shù)。

7. 添加必要、簡(jiǎn)潔的注釋:

循環(huán)中的 continue, break 盡量加上單行注釋;盡量避免非函數(shù)結(jié)尾的 return,必要的時(shí)候加注釋。類自動(dòng)生成 toString() 方法,方便調(diào)試和打日志。

8. 不把自己局限到做某個(gè)功能,每個(gè)人都是整個(gè)項(xiàng)目的 Owner ,盡量交叉 Review ,交叉開發(fā)。

9. 遇到問題及時(shí)和其他人溝通,避免浪費(fèi)時(shí)間。

10. 從最終產(chǎn)品的目標(biāo)審視自己細(xì)小的設(shè)計(jì),熟悉自己負(fù)責(zé)部分的上下游代碼。時(shí)刻關(guān)注最終產(chǎn)品(Web 界面和日志),發(fā)現(xiàn) Bug 和可以改善的地方。


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

華為 Java 編程軍規(guī)

華為 Java 編程軍規(guī)

華為 Java 編程軍規(guī)

長(zhǎng)按訂閱更多精彩▼

華為 Java 編程軍規(guī)

如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝

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

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

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉