成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

升級(jí) Java 編程規(guī)范的6個(gè)約定

taowen / 2482人閱讀

摘要:對(duì)變量對(duì)象或者函數(shù)等進(jìn)行命名時(shí),選擇能清晰表達(dá)其用途的名字。其實(shí),測(cè)試方法名應(yīng)該明確指出測(cè)試的內(nèi)容與條件。和這種命名方式是時(shí)代的前朝遺物。使用自己的異常類(lèi)型筆者又一次錯(cuò)誤地認(rèn)為這一開(kāi)發(fā)習(xí)慣是業(yè)內(nèi)的共識(shí)。

作為 Java 開(kāi)發(fā)人員,我們會(huì)遵循一系列的編碼風(fēng)格和開(kāi)發(fā)習(xí)慣。習(xí)慣使然是一方面,另一方面,我們也從不停下腳步質(zhì)疑這些習(xí)慣。一段時(shí)間以后,筆者養(yǎng)成了一些不同于常人的編碼風(fēng)格和開(kāi)發(fā)習(xí)慣。當(dāng)?shù)谝淮瘟私獾竭@些編碼風(fēng)格時(shí),筆者感到又驚又氣。但是,花了一段時(shí)間踐行這些習(xí)慣之后,筆者意識(shí)到它們的確能造就更加簡(jiǎn)潔可控的代碼庫(kù),同時(shí)也讓開(kāi)發(fā)者更加省心。

不要因這些想法的另類(lèi)而否定它們,筆者建議你用幾周時(shí)間嘗試其中的一兩條,如果你仍然不喜歡它們,換回以前的代碼風(fēng)格也用不了多久時(shí)間。

零注釋?zhuān)ü?API 除外)

筆者一度認(rèn)為業(yè)內(nèi)對(duì)于零注釋這種編程習(xí)慣已經(jīng)達(dá)成共識(shí),但是當(dāng)與許多同事合作之后,筆者發(fā)現(xiàn)事實(shí)并非如此。所以,讓我們?cè)俅翁接戇@個(gè)問(wèn)題:無(wú)注釋。注釋很快就會(huì)與代碼脫節(jié)。假如你在一段代碼的上面寫(xiě)了行注釋?zhuān)l(shuí)也不能保證下一個(gè)修改代碼的人會(huì)更新注釋。根據(jù)筆者的開(kāi)發(fā)經(jīng)驗(yàn),沒(méi)人會(huì)更新注釋。原來(lái)的代碼段可能被刪除,業(yè)務(wù)需求也可能改變。因此,你的注釋往往弊大于利。

對(duì)此,有個(gè)簡(jiǎn)單的解決方案,就是寫(xiě)自記錄代碼(self documenting code)。對(duì)變量、對(duì)象或者函數(shù)等進(jìn)行命名時(shí),選擇能清晰表達(dá)其用途的名字。假如不夠清晰,你需要對(duì)它們進(jìn)行重構(gòu),將之拆分為更簡(jiǎn)潔的形式。只要能直觀地表達(dá)其用途,過(guò)長(zhǎng)的名字也無(wú)需擔(dān)憂。別忘了編輯器有自動(dòng)填寫(xiě)功能,沒(méi)人需要敲出整個(gè)標(biāo)識(shí)符的名字。

然而,公共 API 是一個(gè)明顯的例外。假如你正在建立一個(gè)準(zhǔn)備公開(kāi)發(fā)版的庫(kù),那還是使用簡(jiǎn)潔的方法名比較好。不過(guò), Javadoc 對(duì)這種情況大有裨益,但也僅限此情況。

不要用 “Test” 為測(cè)試方法開(kāi)頭

確實(shí)沒(méi)有必要這么做。你寫(xiě)的方法會(huì)注釋為測(cè)試,方法所在的類(lèi)也存在于測(cè)試包中。明眼人都知道那是測(cè)試。其實(shí),測(cè)試方法名應(yīng)該明確指出測(cè)試的內(nèi)容與條件。例如, “reversesTheWordRandomToModnar()”或者“adds70ToBalanceOf100ToMakeBalanceOf170()”,這些名字都準(zhǔn)確表達(dá)了測(cè)什么功能以及預(yù)期的結(jié)果。

如果你正在使用 IntelliJ ,有一款特別棒的插件叫做 Enso 。它可以將測(cè)試名轉(zhuǎn)化成一個(gè)句子,一目了然地顯示測(cè)試的內(nèi)容。這意味著當(dāng)你在注視任何類(lèi)的時(shí)候, Enso 都會(huì)展示其說(shuō)明文檔。

不要使用@Override

這個(gè)觀點(diǎn)爭(zhēng)議頗多,請(qǐng)聽(tīng)筆者說(shuō)完。假如你不使用 @override ,最壞的結(jié)果就是你重寫(xiě)了一個(gè)函數(shù),而調(diào)用時(shí)執(zhí)行的卻是原版函數(shù),而非重寫(xiě)的版本。值得慶幸的是,在測(cè)試驅(qū)動(dòng)開(kāi)發(fā)模式下,測(cè)試整段代碼時(shí)就會(huì)定位到這個(gè) bug 。這讓 @Override 成了一段冗余的代碼。顯然,冗余的代碼不僅沒(méi)有好處,還會(huì)讓人分心。因此,停止使用 @Override ,而依賴 TDD(測(cè)試驅(qū)動(dòng)開(kāi)發(fā))。

不要使用 getX()/setY() 這樣的函數(shù)名

這確實(shí)讓人不由得感到惱火。 getXXX 和 setXXX 這種命名方式是 Javabeans 時(shí)代的前朝遺物。而 JavaBeans 時(shí)代早已過(guò)去,這種命名方式也不再適用了。后者讓代碼變得令人反感卻沒(méi)有帶來(lái)什么好處。去掉 get/set 這類(lèi)關(guān)鍵字有利于字段名稱的簡(jiǎn)潔。例如, car.engine() 函數(shù)將生成一個(gè)引擎對(duì)象,而 car.engine(new v8()) 將引擎設(shè)置為新的型號(hào)。如果需要讀取多層級(jí)內(nèi)的對(duì)象(例如:car.lights().frontLeft() 對(duì)比 car.getLights().getFrontLeft()),前者依舊表達(dá)清晰而且代碼更加簡(jiǎn)潔。這個(gè)編程習(xí)慣筆者一開(kāi)始也很反對(duì),后來(lái)逐漸改變了看法,現(xiàn)在非常熱衷這一風(fēng)格。

可運(yùn)行的代碼>高性能的代碼

這段內(nèi)容和代碼風(fēng)格關(guān)系不大,而是更加泛泛而談。每次看到人們?yōu)榱艘粋€(gè)問(wèn)題,精雕細(xì)刻地設(shè)計(jì)解決方案,花費(fèi)大量的時(shí)間,筆者都會(huì)感到不悅。其實(shí),在最基本的層面上解決問(wèn)題然后測(cè)試性能。十有八九,這類(lèi)方案都是高速,可擴(kuò)展或符合其他時(shí)髦概念的。相反,筆者經(jīng)??吹饺藗?cè)O(shè)計(jì)了一個(gè)復(fù)雜的緩存解決方案,結(jié)果沒(méi)有提高性能卻把代碼弄成一團(tuán)亂麻。解決問(wèn)題時(shí),先實(shí)施你能采取的最基本方案,然后再進(jìn)行優(yōu)化。最起碼,這種方式能讓你有實(shí)例證明問(wèn)題已經(jīng)解決。

使用自己的異常類(lèi)型

筆者又一次錯(cuò)誤地認(rèn)為這一開(kāi)發(fā)習(xí)慣是業(yè)內(nèi)的共識(shí)。 Java 中的檢查性異常 (Checked exceptions) 很糟糕,幾乎所有其他編程語(yǔ)言(例如C#)都意識(shí)到了這一點(diǎn),所以它們甚至沒(méi)有這個(gè)類(lèi)型。在筆者編寫(xiě)的任何應(yīng)用程序中,都會(huì)創(chuàng)建自己的異常類(lèi)型,在這些應(yīng)用程序中拋出的任何異常都會(huì)用筆者創(chuàng)建的異常類(lèi)接住,然后拋出運(yùn)行時(shí)異常。這讓代碼更加整潔(筆者從未在程序中拋出大量 XXXException ),也意味著筆者能通過(guò) log 追朔異常來(lái)自代碼的哪一部分或者這是完全出乎意料的異常類(lèi)型。

(編譯自:https://dzone.com/articles/upgrade-your-code-conventions-2)

OneAPM 為您提供端到端的 Java 應(yīng)用性能解決方案,我們支持所有常見(jiàn)的 Java 框架及應(yīng)用服務(wù)器,助您快速發(fā)現(xiàn)系統(tǒng)瓶頸,定位異常根本原因。分鐘級(jí)部署,即刻體驗(yàn),Java 監(jiān)控從來(lái)沒(méi)有如此簡(jiǎn)單。想閱讀更多技術(shù)文章,請(qǐng)?jiān)L問(wèn) OneAPM 官方技術(shù)博客。
本文轉(zhuǎn)自 OneAPM 官方博客

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/65355.html

相關(guān)文章

  • #yyds干貨盤(pán)點(diǎn)# Spring Boot前世今生以及它和Spring Cloud關(guān)系詳解。

    摘要:經(jīng)過(guò)年時(shí)間的發(fā)展,到目前為止,最新穩(wěn)定版為版本。的發(fā)展剛出生的時(shí)候,引起了很多開(kāi)源社區(qū)的關(guān)注,并且也有個(gè)人和企業(yè)開(kāi)始嘗試使用。通過(guò)項(xiàng)目搭建過(guò)程來(lái)對(duì)比的差異和優(yōu)勢(shì)。當(dāng)然它的作用不僅于此,后續(xù)會(huì)逐步揭開(kāi)它的真實(shí)面目。而和就相當(dāng)于當(dāng)年的和的關(guān)系。 要了解Spring Boot的發(fā)展背景,還得從2004年Spring ...

    番茄西紅柿 評(píng)論0 收藏2637
  • Python編程規(guī)范筆記(上)

    摘要:編程規(guī)范筆記上寫(xiě)在前面從語(yǔ)言開(kāi)始,自己陸續(xù)學(xué)習(xí)了,但是自從研究生做畢設(shè)接觸以來(lái),就愛(ài)不釋手,再也沒(méi)有動(dòng)力嘗試其他語(yǔ)言。一與的一大優(yōu)勢(shì)就是具備優(yōu)秀的可讀性,而這基于一套較為完整的公認(rèn)編程規(guī)范。如原本希望的結(jié)果是,結(jié)果卻完全一樣。 Python編程規(guī)范筆記(上) 寫(xiě)在前面: 從C語(yǔ)言開(kāi)始,自己陸續(xù)學(xué)習(xí)了C++/Java,但是自從研究生做畢設(shè)接觸Python以來(lái),就愛(ài)不釋手,再也沒(méi)有動(dòng)力嘗試...

    Kross 評(píng)論0 收藏0
  • 如何快速搭建一個(gè)微服務(wù)架構(gòu)

    摘要:如何快速搭建一個(gè)微服務(wù)架構(gòu)上圖異步通信方式通常異步的生產(chǎn)者消費(fèi)者模式,通過(guò)等異步消息通訊協(xié)議規(guī)范。數(shù)據(jù)的去中心化,進(jìn)一步降低了微服務(wù)之間的耦合度,不同服務(wù)可以采用不同的數(shù)據(jù)庫(kù)技術(shù)等。 什么是微服務(wù)? 微服務(wù)(Microservices Architecture)是一種架構(gòu)風(fēng)格,一個(gè)大型復(fù)雜軟件應(yīng)用由一個(gè)或多個(gè)微服務(wù)組成。系統(tǒng)中的各個(gè)微服務(wù)可被獨(dú)立部署,各個(gè)微服務(wù)之間是松耦合的。每個(gè)微服...

    MockingBird 評(píng)論0 收藏0
  • 什么是微服務(wù)架構(gòu)

    摘要:數(shù)據(jù)的去中心化,進(jìn)一步降低了微服務(wù)之間的耦合度,不同服務(wù)可以采用不同的數(shù)據(jù)庫(kù)技術(shù)等。微服務(wù)架構(gòu)是持續(xù)交付的巨大推動(dòng)力,允許在頻繁發(fā)布不同服務(wù)的同時(shí)保持系統(tǒng)其他部分的可用性和穩(wěn)定性。 什么是微服務(wù)? 微服務(wù)(Microservices Architecture)是一種架構(gòu)風(fēng)格,一個(gè)大型復(fù)雜軟件應(yīng)用由一個(gè)或多個(gè)微服務(wù)組成。系統(tǒng)中的各個(gè)微服務(wù)可被獨(dú)立部署,各個(gè)微服務(wù)之間是松耦合的。每個(gè)微服務(wù)...

    IntMain 評(píng)論0 收藏0
  • Java? 教程(變量)

    變量 正如你在上一課中所了解到的,對(duì)象將其狀態(tài)存儲(chǔ)在字段中。 int cadence = 0; int speed = 0; int gear = 1; 什么是對(duì)象?討論向你介紹了字段,但你可能還有一些問(wèn)題,例如:命名字段的規(guī)則和約定是什么?除了int之外,還有哪些其他數(shù)據(jù)類(lèi)型?在聲明字段時(shí)是否必須初始化字段?如果未明確初始化字段,是否為字段分配了默認(rèn)值?我們將在本課中探討這些問(wèn)題的答案,但在我們...

    elina 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<