<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          怎樣的變量命名,才顯得有文化?

          共 2500字,需瀏覽 5分鐘

           ·

          2020-11-21 19:02

          There are only two hard things in Computer Science: cache invalidation and naming things.
          計(jì)算機(jī)科學(xué)領(lǐng)域只有兩大難題:緩存失效和命名。
          -- Phil Karlton

          相信不少程序員都為變量命名這個(gè)問(wèn)題傷透了腦筋。變量名太短了別人看不懂,太長(zhǎng)了又顯得啰嗦,不長(zhǎng)不短又考驗(yàn)詞匯量,一不留神就跟已有變量名重復(fù)。取得一手好名字確實(shí)是一個(gè)挑戰(zhàn),也是一門藝術(shù)。今天我們就來(lái)聊聊,到底要怎樣命名,才能顯示出水平?

          不同的編程語(yǔ)言有不同的具體命名規(guī)范,通常包含在語(yǔ)言的風(fēng)格指南里。本文不打算討論各種語(yǔ)言的代碼風(fēng)格問(wèn)題,只討論跟具體語(yǔ)言無(wú)關(guān)的命名準(zhǔn)則。

          為什么需要命名規(guī)范

          從本質(zhì)上來(lái)說(shuō),變量名只是個(gè)標(biāo)識(shí)符,用于表示內(nèi)存中的一個(gè)地址或者數(shù)據(jù)。按理說(shuō)只要符合編程語(yǔ)言的語(yǔ)法規(guī)則,無(wú)論怎么命名都不會(huì)影響代碼的執(zhí)行結(jié)果。那為什么我們還要強(qiáng)調(diào)命名規(guī)范呢?記得有人說(shuō)過(guò),代碼首先是給人看的,其次才是計(jì)算機(jī)。代碼在執(zhí)行前,通常要經(jīng)過(guò)作者深思熟慮的編寫(xiě),甚至同行評(píng)審(code review)過(guò)后,確保沒(méi)有明顯的問(wèn)題才會(huì)交給計(jì)算機(jī)執(zhí)行。計(jì)算機(jī)只負(fù)責(zé)編譯執(zhí)行,才不管你的代碼寫(xiě)得好不好看,有沒(méi)有邏輯問(wèn)題,擴(kuò)展性如何等等。從這個(gè)角度說(shuō),良好的命名規(guī)范可以提高代碼質(zhì)量,減少軟件缺陷。

          良好的命名具有自文檔的作用,看變量名就知道代表什么含義。無(wú)論對(duì)于團(tuán)隊(duì)成員協(xié)作還是自己維護(hù)代碼,都很有意義。否則就會(huì)出現(xiàn)下面這種尷尬的局面:


          什么是好的命名

          在生活中,漂亮的人名讓人賞心悅目,還有著豐富的含義,讓人印象深刻。雖然說(shuō)給變量命名不需要這么高的文學(xué)水準(zhǔn),但是也要具備一些基本的要素。個(gè)人認(rèn)為,好的變量名通常具備以下幾個(gè)特點(diǎn)。

          • 符合代碼風(fēng)格
            比如大小寫(xiě)要求,使用特定的字符表示特殊的含義,等等。這些按照特定語(yǔ)言的規(guī)范和團(tuán)隊(duì)規(guī)范來(lái)就行了。

          • 長(zhǎng)短適中
            變量名不宜過(guò)短,也不宜過(guò)長(zhǎng)。早些年編輯器不夠發(fā)達(dá),為了少打幾個(gè)字母,能省則省,變量名往往很簡(jiǎn)短,喜歡用各種縮寫(xiě)。要是使用約定俗成的縮寫(xiě)還好,最怕那些用拼音首字母縮寫(xiě)的,看代碼就像猜謎語(yǔ)。現(xiàn)在 IDE 如此強(qiáng)大,自動(dòng)補(bǔ)全功能已經(jīng)很完善了,完全沒(méi)必要為了省那幾個(gè)字母讓其他人看得一頭霧水。當(dāng)然,也不是說(shuō)越長(zhǎng)越好,比如

          function?iCanNotReadTheNumberSoIWriteThisFunctionToTransformStringsToNumber()?{
          }

          ? ? ? ?這有點(diǎn)夸張了。記住一個(gè)原則:在足夠表達(dá)含義的前提下盡量簡(jiǎn)短。

          • 有意義的單詞
            變量名最好是一個(gè)有意義的單詞,用來(lái)表示特定的含義,比如動(dòng)作、屬性、數(shù)據(jù)等。當(dāng)然,這也不是絕對(duì)的。比如在for循環(huán)里用的i變量,已經(jīng)約定俗成了,屬于作用域范圍很小的局部變量,用完即丟。這種情況可以使用簡(jiǎn)潔的命名。

          • 有具體的含義
            除了要有意義,還需要含義盡量具體。比如data,item,list等,雖然也能用,但是含義太泛了,不夠具體。更好的名字是userProfile,orderItembookList等,一眼就能看出所代表的業(yè)務(wù)模型。

          • 詞性準(zhǔn)確
            屬性、方法、類等命名所采用的詞性也有講究。方法(函數(shù))通常代表了一個(gè)動(dòng)作或者狀態(tài)判斷,所以應(yīng)該用動(dòng)詞、系表結(jié)構(gòu)、介詞短語(yǔ)或者動(dòng)賓結(jié)構(gòu)。比如render,isPrototypeOf,toStringgetOrders等。說(shuō)到這里可能有人覺(jué)得有點(diǎn)裝X了,是不是要把英語(yǔ)老師請(qǐng)過(guò)來(lái)?其實(shí)也不必過(guò)分解讀,只要記住一個(gè)原則就行了,那就是方法代表了一個(gè)操作。這樣你就不會(huì)用一個(gè)名詞當(dāng)做方法名。屬性名通常使用名詞,形容詞,動(dòng)詞過(guò)去式等。類名基本用名詞,代表了一種業(yè)務(wù)模型。

          • 純英文
            這點(diǎn)沒(méi)辦法,誰(shuí)讓發(fā)明編程的人是說(shuō)英語(yǔ)的呢。雖然從編程語(yǔ)法上來(lái)說(shuō),有時(shí)候也能用非英文做標(biāo)識(shí)符,但是最好盡量避免這種不倫不類的做法。比如有人喜歡用拼音,甚至拼音和英語(yǔ)混著用。個(gè)別情況下可以用拼音,那是實(shí)在找不到對(duì)應(yīng)的英文單詞了。大部分情況下,用純英文單詞顯得比較專業(yè),以及,比較有文化(逼格)。還有就是,不要用中式英語(yǔ)!我見(jiàn)過(guò)太多的isModify,isDelete這種表達(dá)方式了,看得我尷尬癌都犯了。這種寫(xiě)法,內(nèi)部幾個(gè)人的項(xiàng)目也就罷了,如果是開(kāi)源項(xiàng)目,拿出去都丟人??!

          以我多年的搬磚經(jīng)驗(yàn),見(jiàn)過(guò)一些在命名方面比較講究的框架和庫(kù),比如微軟的 .Net Framework,C# 的命名,用詞準(zhǔn)確、精煉,看起來(lái)就很舒服。還有就是 Vue.js,API 命名也相當(dāng)優(yōu)雅。那幾個(gè)鉤子函數(shù),createdmounted,destroyed,activated,errorCaptured等等,簡(jiǎn)潔而不失準(zhǔn)確,詞義相當(dāng)?shù)轿?。而相比之下,React 就稍差了。什么componentDidMount,componentWillMount,shouldComponentUpdate……這一看就沒(méi)什么文化嘛,表義有余而精煉不足。

          保命環(huán)節(jié)

          好了,裝X到此結(jié)束。以上純屬個(gè)人觀點(diǎn),請(qǐng)各位看官酌情而噴。本文只是從編碼規(guī)范方面談?wù)勛约旱目捶ǎ簧婕叭魏渭夹g(shù)層面的東西。有人會(huì)說(shuō),真正的高手還在乎這些嗎?操起鍵盤就是干,完成需求就好了,代碼寫(xiě)那么漂亮有什么用?


          有些人覺(jué)得代碼寫(xiě)得越晦澀難懂,越能顯示出水平。對(duì)此我只能說(shuō),打擾了!個(gè)人認(rèn)為,只要代碼還需要人閱讀(哪怕只有自己一個(gè)人),就應(yīng)該對(duì)可讀性有點(diǎn)追求,把代碼當(dāng)成一件藝術(shù)品來(lái)看待。

          其實(shí)看到這里,很多人心里有點(diǎn)犯難了。上面說(shuō)得是有點(diǎn)道理,可是我英語(yǔ)很菜,詞匯量完全不夠用啊,怎么辦?

          別害怕,編程都能學(xué)會(huì),還怕幾個(gè)英語(yǔ)單詞?詞匯量不夠,不是有有道詞典嗎?再不濟(jì)用百度也行吧??傊?,英語(yǔ)不好不能拿來(lái)當(dāng)借口喲。

          最后

          • 關(guān)注公眾號(hào)【前端宇宙】,每日獲取好文推薦
          • 添加微信,入群交流

          “在看和轉(zhuǎn)發(fā)”就是最大的支持


          瀏覽 90
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日日操夜夜操狠狠操 | 在线观看的黄色小视频 | 51久久国产露脸精品国产 | 蜜桃91精品入口 | 亚洲黄片视频 |