0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

寫(xiě)代碼不難,難的是寫(xiě)高質(zhì)量代碼!

5RJg_mcuworld ? 來(lái)源:lq ? 2019-01-22 11:13 ? 次閱讀

作為程序員,要有“刨根問(wèn)底”的精神:知其然,更要知其所以然!

以下為譯文:

在如今這個(gè)時(shí)代,每個(gè)人都在努力提升資源能力。在Web應(yīng)用程序方面,我們有Spring、Play和Struts等框架,這些框架可以幫助我們構(gòu)建具有可擴(kuò)展性和可管理性的軟件。這些框架提供了許多樣板代碼,所以你無(wú)需在應(yīng)用程序中再寫(xiě)這些代碼。

不過(guò),寫(xiě)代碼并不難,但是寫(xiě)高質(zhì)量的代碼卻很難。

作為開(kāi)發(fā)人員,在日常工作中我們也應(yīng)該遵循相同的基本原則。我們應(yīng)該將工作完成得盡善盡美,不能將任何錯(cuò)誤留給客戶(hù)。很多時(shí)候,迫于壓力開(kāi)發(fā)人員會(huì)編寫(xiě)管理不善或復(fù)雜的代碼。為了編寫(xiě)高質(zhì)量的代碼,有一條經(jīng)驗(yàn)法則是寫(xiě)出的代碼應(yīng)該讓所有人都能當(dāng)作短語(yǔ)一樣閱讀。

寫(xiě)代碼時(shí)應(yīng)當(dāng)牢記的事情

多想少寫(xiě),在寫(xiě)之前深思熟慮;

遵循最佳實(shí)踐;

使用SonarQube等代碼質(zhì)量工具,或者如果使用eclipse或IntelliJ等IDE的話(huà),也可以使用Sonar插件(SonarLint),這些都可以輕松入手;

盡量編寫(xiě)通用的代碼;

不要自行創(chuàng)建API中存在的isEmpty、isNull或isNotNull等方法,許多有名的開(kāi)源庫(kù)(比如Apache)都提供了定義良好的方法;

使用IDE的重構(gòu)工具,并了解其快捷方式:

publicvoiddoSomething(){Line1....Line2....Line3....Line4....Line5....}

如果你想抽取1-4并創(chuàng)建一個(gè)單獨(dú)的方法。常見(jiàn)的做法是:復(fù)制,創(chuàng)建一個(gè)方法,然后將復(fù)制的行粘貼到該方法中;總共需要3-4步。在做這樣的任務(wù)時(shí),你可以使用IDE的重構(gòu)工具(而無(wú)需復(fù)制粘貼)。

重構(gòu)工具有許多重要的功能,包括:

將一段代碼從一個(gè)位置移動(dòng)到另一個(gè)位置;

從其他地方抽取一段代碼,然后創(chuàng)建一個(gè)方法(如上例所示);

重命名文件,變量或方法,注意,如果你手動(dòng)做這個(gè)任務(wù),那么就需要手動(dòng)修改所有的地方;

盡量編寫(xiě)正確的測(cè)試用例(可選)。

編寫(xiě)類(lèi)

類(lèi)名應(yīng)該是名詞,每個(gè)單詞的首字母都應(yīng)該大寫(xiě);

在編寫(xiě)新類(lèi)之前,搜索項(xiàng)目中是否存在這樣的文件。很多時(shí)候,我們會(huì)發(fā)現(xiàn)我們以不同的名稱(chēng)創(chuàng)建了相同的文件,這會(huì)誤導(dǎo)項(xiàng)目和其他開(kāi)發(fā)人員。例如:

通過(guò)類(lèi)名完整地描述的功能;

使用適當(dāng)?shù)脑L(fǎng)問(wèn)修飾符;

文件的打包也非常重要,把正確的文件放在正確的地方,不要把常量文件放在util包等錯(cuò)誤的地方,正確的地方應(yīng)該是常量或元數(shù)據(jù)。

編寫(xiě)方法

方法是動(dòng)詞,所以名稱(chēng)應(yīng)該采用駝峰式命名法,例如doWhatToDo(),而非doWHatTODO();

一個(gè)方法不應(yīng)該超過(guò)30行,如果超過(guò)30行則說(shuō)明過(guò)于復(fù)雜;

在定義方法之前認(rèn)真考慮,方法應(yīng)該具有某些含義,或者應(yīng)該為特定的任務(wù)服務(wù),例如createPerson或sendMail;

一個(gè)方法不應(yīng)該同時(shí)執(zhí)行多個(gè)任務(wù),如果方法名為createPerson,那么就應(yīng)該只創(chuàng)建一個(gè)人,不應(yīng)該再做別的任務(wù)。很多人會(huì)這樣做:

publicLongcreatePerson(PersonVOpersonVO){1.Appointmentappointment=tryingtogettinganappointmentfromDB.2.thenperformingifelseovertheresultofappointment.....14.thenupdatingsomethingonthebasisofsomecondition.15.thenfinallycreatingperson.}

很多時(shí)候方法都超過(guò)了這個(gè)限制,開(kāi)發(fā)人員在一個(gè)方法中編寫(xiě)100-300行代碼,最后只會(huì)讓代碼面目可憎且難以理解。

引發(fā)的問(wèn)題包括:

無(wú)法理解代碼流;

調(diào)試問(wèn)題;

測(cè)試問(wèn)題;

解決一個(gè)bug需要很長(zhǎng)時(shí)間。

解決方法:

將其他任務(wù)轉(zhuǎn)移到別的方法中;

提取方法中的有效代碼,然后調(diào)用其他方法。

所以,這段代碼應(yīng)該像下面這樣:

publicLongcreatePerson(PersonVOpersonVO){appoitnmentValidation();updatingSomething();creatingpersoncode;}

編寫(xiě)變量

變量名應(yīng)該采用駝峰式命名法,例如isTrue、userService、personName以及l(fā)ocalServiceRerpository;

不應(yīng)該使用一個(gè)字符的名稱(chēng),除非在臨時(shí)情況下;

不應(yīng)該以_和$開(kāi)頭;

在定義變量名之前認(rèn)真考慮;

不要使用大寫(xiě)。

編寫(xiě)常量

盡量通過(guò)類(lèi)來(lái)定義常量,而不是接口;

定義final類(lèi);

在常量類(lèi)中創(chuàng)建一個(gè)私有構(gòu)造函數(shù),確保沒(méi)人可以創(chuàng)建實(shí)例;

如果你整個(gè)服務(wù)都會(huì)使用唯一的一個(gè)常量文件,那么最好通過(guò)注釋來(lái)分段,如下所示:

/****Cache****/publicstaticfinalStringCACHE_NAME="personCache";/****Attributes****/publicstaticfinalStringNAME="name";publicstaticfinalStringMOBILE="mobile";/****Configuration****/publicstaticfinalStringAPP_NAME="PersonDemo";publicstaticfinalStringAPP_VERSION="1.0";

如此可以方便搜索整個(gè)文件。

常量名應(yīng)該非常具體,應(yīng)該全部使用大寫(xiě),并利用下劃線(xiàn)來(lái)分割,例如APP_NAME,而非appName。

編寫(xiě)邏輯

避免使用多個(gè)嵌套的If else,這會(huì)增加代碼的循環(huán)復(fù)雜度;

盡量編寫(xiě)通用的代碼;

不要僅僅利用log來(lái)記錄異常,應(yīng)當(dāng)拋出正確的消息或異常,而不是只輸出異常。

什么是“通用代碼”?

在很多項(xiàng)目重構(gòu)的時(shí)候,我們都會(huì)發(fā)現(xiàn)一些本不應(yīng)該存在的冗余代碼。

假設(shè)我們有一個(gè)郵件草稿的POJO類(lèi),它的成員會(huì)在發(fā)送郵件時(shí)被使用。那么,發(fā)送郵件所需的步驟有哪些?

我們需要通過(guò)設(shè)置數(shù)據(jù)來(lái)創(chuàng)建一個(gè)POJO對(duì)象;

我們需要編寫(xiě)發(fā)送郵件的代碼。

那么最終的代碼行數(shù)為:

對(duì)象創(chuàng)建——1行:

MailDraftmailDraft=newMailDraft();

設(shè)置數(shù)據(jù)——3行:

mailDraft.setTo();mailDraft.setBody();mailDraft.setMessage();

發(fā)送郵件的邏輯至少需要4行,所以總共有9-10行代碼。

如果我們需要在多重條件或事件中發(fā)送郵件,那么情況會(huì)怎樣?我們需要相同的邏輯,而且通常我們會(huì)發(fā)現(xiàn)開(kāi)發(fā)人員在每個(gè)地方都重復(fù)了相同的步驟,并創(chuàng)建一個(gè)擁有某些特定代碼的方法,于是冗余開(kāi)始層層疊加。

但是,如果我們將創(chuàng)建草稿和發(fā)送郵件的代碼提出來(lái),放到另一個(gè)方法中,那么每個(gè)方法都可以調(diào)用這段代碼,于是每個(gè)方法都省卻了10行代碼,我們就無(wú)需一次又一次地重復(fù)這段代碼了。

不要匆匆忙忙地趕代碼。如果情非得已,那么也要記得加注釋?zhuān)?/p>

TODO:需要重構(gòu)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6820

    瀏覽量

    88748
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4723

    瀏覽量

    68242
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    37

    文章

    3237

    瀏覽量

    57548

原文標(biāo)題:寫(xiě)高質(zhì)量的代碼,永不言晚!

文章出處:【微信號(hào):mcuworld,微信公眾號(hào):嵌入式資訊精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    分享一些優(yōu)秀的verilog代碼 高質(zhì)量verilog代碼的六要素

    高質(zhì)量的verilog代碼至少需要包含以下幾個(gè)要素:可讀性、功能、性能、標(biāo)準(zhǔn)化、穩(wěn)定性、可定位。
    的頭像 發(fā)表于 07-18 10:09 ?1084次閱讀
    分享一些優(yōu)秀的verilog<b class='flag-5'>代碼</b> <b class='flag-5'>高質(zhì)量</b>verilog<b class='flag-5'>代碼</b>的六要素

    何為高質(zhì)量代碼?如何寫(xiě)出高質(zhì)量代碼?

    懂得“數(shù)據(jù)結(jié)構(gòu)與算法” 寫(xiě)出高效的代碼,懂得“設(shè)計(jì)模式”寫(xiě)出高質(zhì)量代碼
    發(fā)表于 08-02 09:44 ?758次閱讀
    何為<b class='flag-5'>高質(zhì)量</b>的<b class='flag-5'>代碼</b>?如何寫(xiě)出<b class='flag-5'>高質(zhì)量</b><b class='flag-5'>代碼</b>?

    編寫(xiě)高質(zhì)量C語(yǔ)言代碼

    編寫(xiě)高質(zhì)量C語(yǔ)言代碼 編寫(xiě)高質(zhì)量C語(yǔ)言代碼 編寫(xiě)高質(zhì)量C語(yǔ)言代碼
    發(fā)表于 07-31 17:47

    高質(zhì)量c語(yǔ)言高級(jí)教程

    。這些軟件頻頻獲獎(jiǎng),有一個(gè)軟件獲得首屆中國(guó)大學(xué)生電腦大賽軟高質(zhì)量 C++/C 編程指南,v 1.0 2001 Page 7 of 101件展示一等獎(jiǎng)。在 1995 年開(kāi)發(fā)的一套圖形軟件庫(kù)到 2000
    發(fā)表于 01-07 11:16

    高質(zhì)量編程

    干貨,《495個(gè)C語(yǔ)言問(wèn)題》、《華為內(nèi)部程序設(shè)計(jì)編碼規(guī)范》、《C語(yǔ)言:陷阱和缺陷》、《高質(zhì)量C編程[林銳]》
    發(fā)表于 02-27 19:39

    10個(gè)嵌入式小技巧 教你寫(xiě)出高質(zhì)量代碼

    由于物聯(lián)網(wǎng)的發(fā)展,現(xiàn)在沒(méi)人不知道嵌入式系統(tǒng)了,加上身邊也有很多嵌入式的設(shè)備,所以這也讓大家開(kāi)始都轉(zhuǎn)入到嵌入式門(mén)下,那么因?yàn)榍度胧疆吘故羌夹g(shù),所以下面也來(lái)給大家介紹下10個(gè)嵌入式技巧,教你怎么寫(xiě)高質(zhì)量
    發(fā)表于 12-20 16:19

    高質(zhì)量代碼的設(shè)計(jì)特點(diǎn)

    高質(zhì)量的設(shè)計(jì)往往有一些共同的特點(diǎn)。如果你能達(dá)到這些對(duì)象,那么可以認(rèn)為你的設(shè)計(jì)也是非常成功的。有些對(duì)象是互相矛盾的。但是這是設(shè)計(jì)的挑戰(zhàn)所在,在相互矛盾的對(duì)象之間做出
    發(fā)表于 07-19 15:15 ?0次下載

    微軟四大名著之編程精粹:編寫(xiě)高質(zhì)量C語(yǔ)言代碼

    c語(yǔ)言有些比較冗雜,要想編出一些高質(zhì)量的c語(yǔ)言代碼,需要思想來(lái)指導(dǎo),才能更好寫(xiě)代碼。
    發(fā)表于 04-20 10:50 ?0次下載

    怎樣來(lái)為arm寫(xiě)c代碼

    怎樣來(lái)為arm寫(xiě)c代碼
    發(fā)表于 10-30 10:32 ?12次下載
    怎樣來(lái)為arm<b class='flag-5'>寫(xiě)</b>c<b class='flag-5'>代碼</b>

    高質(zhì)量Verilog代碼有什么特點(diǎn)

    高質(zhì)量的verilog代碼主要包含以下幾個(gè)要素:可讀性、功能、性能、標(biāo)準(zhǔn)化、穩(wěn)定性、可定位。
    發(fā)表于 03-30 10:12 ?1929次閱讀
    <b class='flag-5'>高質(zhì)量</b>Verilog<b class='flag-5'>代碼</b>有什么特點(diǎn)

    如何編寫(xiě)高質(zhì)量的Javascript代碼

    這篇文章不僅僅從代碼本身來(lái)考慮如何優(yōu)化編碼,也從代碼的設(shè)計(jì)階段來(lái)考慮,包括書(shū)寫(xiě)API文檔,同事的review,使用JSLint。這些習(xí)慣都能幫助你編寫(xiě)更加高質(zhì)量的、更易于理解的、可維護(hù)的代碼
    發(fā)表于 01-21 14:28 ?7次下載
    如何編寫(xiě)<b class='flag-5'>高質(zhì)量</b>的Javascript<b class='flag-5'>代碼</b>

    程序員是怎么寫(xiě)代碼的?常見(jiàn)問(wèn)詳解

    騰訊程序員是怎么寫(xiě)代碼的?,代碼,插件,sql,調(diào)用,編程
    的頭像 發(fā)表于 02-20 15:38 ?9625次閱讀

    qt用C++寫(xiě)的2048小游戲源代碼

    qt用C++寫(xiě)的2048小游戲源代碼
    發(fā)表于 09-27 11:48 ?1次下載

    阿里云內(nèi)部全面推行AI寫(xiě)代碼

    阿里云正在內(nèi)部全面推行 AI 編程,使用通義靈碼輔助程序員寫(xiě)代碼、讀代碼、查 BUG、優(yōu)化代碼等。
    的頭像 發(fā)表于 04-07 09:22 ?518次閱讀

    如何提升代碼質(zhì)量與效率的秘訣

    提高編程能力其實(shí)沒(méi)有捷徑,最佳方式就是多寫(xiě)代碼。 不過(guò),除了寫(xiě)大量代碼,提升編程能力還需要大量閱讀別人寫(xiě)
    的頭像 發(fā)表于 04-28 14:53 ?347次閱讀
    如何提升<b class='flag-5'>代碼</b><b class='flag-5'>質(zhì)量</b>與效率的秘訣