[代碼大全讀書筆記]如何定義一個(gè)好的變量名

在日常編程中最煩惱的就是給變量取名缓待,一段好代碼,既要能完美地運(yùn)行族沃,還要能較容易地維護(hù)频祝。這就意味著需要讓日后維護(hù)代碼的人能很快地看懂你的代碼,而且脆淹,在團(tuán)隊(duì)合作中常空,其他開發(fā)者也會(huì)經(jīng)常閱讀你那部分代碼。如果你的代碼中充滿了a,b,c,a1,a2,a3...那簡(jiǎn)直就是一個(gè)噩夢(mèng)盖溺。因此漓糙,好的變量名非常重要。

選擇好變量名的注意事項(xiàng)

變量和變量名本質(zhì)上是同一件事物烘嘱,因此昆禽,變量的好與壞就在很大程度上取決于它的命名的好與壞蝗蛙。

下面舉一個(gè)糟糕命名的例子

$pp = ($cp > 1) ? ($cp - 1) : $cp;
$np = ($cp < $tp) ? ($cp + 1) : $tp;

$p = new P($pp, $cp, $np, $tp);

這段代碼在做什么呢?也許可以大概知道是在計(jì)算一些信息醉鳖,但是歼郭,計(jì)算的是什么信息呢?$p,$pp,np,$tp等等這些變量代表的是什么呢辐棒?講真病曾,如果沒有任何注釋,任何人都無(wú)法看不懂這段代碼想表達(dá)的意思漾根。如果寫這段代碼的人告訴你泰涂,這段代碼是在計(jì)算分頁(yè)信息,然后實(shí)例化一個(gè)分頁(yè)類辐怕,那么你應(yīng)該如何命名呢逼蒙?

下面是這段代碼的另一種寫法,看起來(lái)更加清晰:

$prev_page_num = ($curr_page_num > 1) ? ($curr_page_num - 1) : $curr_page_num);
$next_page_num = ($next_page_num < $total_page_num) ? ($curr_page_num + 1) : $total_page_num);

$page = new Page($prev_page_num, $curr_page_num, $next_page_num, $total_page_num);

從上面兩段代碼可以看出寄疏,一個(gè)好的變量名在可讀性和可維護(hù)性上是極其重要的是牢。而且好的變量名是易記的∩陆兀可以通過(guò)應(yīng)用多條原則來(lái)實(shí)現(xiàn)這些目標(biāo)驳棱。

最重要的命名注意事項(xiàng)

  • 名字要完全、準(zhǔn)確地描述出該變量所代表的事物
  • 用名字表達(dá)變量所代表的是什么农曲,不包含晦澀的縮寫社搅,同時(shí)也沒有歧義

下表給出一些變量名稱的例子,其中有好的也有差的乳规。

變量用途 好名字形葬,好描述 壞名字,差描述
到期的支票累計(jì)額 runningTotal,checkTotal written,ct,checks,CHKTTL,x,x1,x2
高速列車的運(yùn)行速度 velocity,trainVelocity,velocityInMph velt,v,tv,x,x1,x2,train
當(dāng)前日期 currentDate,todaysDate cd,current,c,x,x1,x2,date
每頁(yè)的行數(shù) linesPerPage lpp,lines,l,x,x1,x2

currentDate和todaysDate都是很好的名字暮的,因?yàn)樗鼈兌纪耆覝?zhǔn)確地描述出了“當(dāng)前日期”這一概念笙以。

cd和c是很糟糕的命名,因?yàn)樗鼈冇昧颂痰目s寫冻辩,而且又不具有描述性猖腕。

current也很糟,因?yàn)樗]有告訴你是當(dāng)前什么微猖。

date看上去不錯(cuò)谈息,但經(jīng)過(guò)最后推敲它也只是個(gè)壞名字缘屹,因?yàn)檫@里所說(shuō)的日期并不是所有的日期均可凛剥,而只是特指當(dāng)前日期,而date本身并未表達(dá)出這層含義轻姿。

x,x1和x2永遠(yuǎn)都是壞名字--傳統(tǒng)上用x代表一個(gè)未知量犁珠,如果不希望你的變量所代表的是一個(gè)未知量逻炊,那么請(qǐng)考慮取一個(gè)更好的名字吧。

名字應(yīng)該盡可能地明確犁享。像x余素、temp、i這些名字都泛泛可得可以用于多種目的炊昆,它們并沒有像應(yīng)該的那樣提供足夠信息桨吊,因此通常是命名上的敗筆。

以問(wèn)題為導(dǎo)向

一個(gè)好記的名字反映的通常都是問(wèn)題凤巨,而不是解決方案视乐。即,一個(gè)好名字通常表達(dá)的是什么(What)敢茁,而不是怎么樣(How)佑淀。通常來(lái)說(shuō),如果一個(gè)名字反映了計(jì)算機(jī)的某些方面而不是問(wèn)題本身彰檬,那么它反映的就是“How”而非“What”了伸刃。

比如,考慮下面這兩個(gè)變量命名:inputRec和employeeData逢倍。inputRec是一個(gè)反映輸入捧颅、記錄這些計(jì)算概念的計(jì)算機(jī)術(shù)語(yǔ)。employeeData則直指問(wèn)題領(lǐng)域较雕,與計(jì)算機(jī)無(wú)關(guān)隘道。
類似地,printerReady比bitFlag更能表達(dá)打印機(jī)的狀態(tài)郎笆;在財(cái)務(wù)軟件里谭梗,calcVar比sum來(lái)得更準(zhǔn)確。

最適當(dāng)?shù)拿珠L(zhǎng)度

經(jīng)研究發(fā)現(xiàn)宛蚓,變量名的平均長(zhǎng)度在10到16個(gè)字符的時(shí)候激捏,調(diào)試花的力氣是最小的。平均名字長(zhǎng)度在8到20隔字符的程序也幾乎同樣容易調(diào)試凄吏。這并不意味著你的變量名一定要在8到20個(gè)字符远舅,它強(qiáng)調(diào)的是,如果你查看自己寫的代碼時(shí)發(fā)現(xiàn)了很多更短的名字痕钢,那么你就需要認(rèn)真檢查图柏,確保這些名字含義足夠清晰。

下面展示變量名太長(zhǎng)任连、太短或剛好的示例:

太長(zhǎng) : numberOfPeopleOnTheUsOlympicTeam; numberOfSeatsInTheStadium; maximumNumberOfPointsInModernOlympics

太短 : n, np, ntm; n, ms, nsisd; m, mp, max, points

正好 : numTeamMembers, teamMemberCount; numSeatsInStadium, seatCount; teamPointsMax, pointsRecord

變量名中的計(jì)算值限定詞

很多程序都有表示計(jì)算結(jié)果的變量:總額蚤吹、平均值、最大值,等等裁着。如果你要用類似Total繁涂、Sum、Average二驰、Max扔罪、Min、Record桶雀、String矿酵、Pointer這樣的限定詞來(lái)修改某個(gè)名字,那么請(qǐng)記住把限定詞加到名字的最后矗积。

這種方法的優(yōu)點(diǎn):

  • 變量名中最重要的那部分坏瘩,即為這一變量賦予主要含義的部分應(yīng)當(dāng)位于最前面,這樣漠魏,這一部分就可以顯得最為突出倔矾,并會(huì)被首先閱讀到;
  • 避免了由于同時(shí)在程序中使用totalRevenue和revenueTotal而產(chǎn)生的歧義
  • 使用統(tǒng)一的編碼規(guī)范可以提高可讀性柱锹,簡(jiǎn)化維護(hù)工作哪自。比如,revenueTotal禁熏、expenseTotal壤巷、revenueAverage、expenseAverage這組名字具有非常優(yōu)雅的對(duì)稱性瞧毙。而totalRevenue胧华、expenseTotal、revenueAverage宙彪、averageRevenue這組名字中則看不出什么規(guī)律來(lái)矩动。

這條規(guī)則也有例外,那就是Num的限定詞的位置已經(jīng)是約定俗成的释漆。Num放在變量名的開始位置代表一個(gè)總數(shù)悲没,比如:numCustomers表示員工的總數(shù)。Num放在變量名的結(jié)束位置代表一個(gè)下標(biāo):customerNum表示的是當(dāng)前員工的序號(hào)男图。這樣使用Num常常會(huì)帶來(lái)麻煩示姿,因此,最好的方法是避開這些問(wèn)題逊笆,使用Count或者Total來(lái)代表總數(shù)栈戳,使用Index來(lái)指代某個(gè)特定的員工。這樣难裆,customerCount就代表員工的總數(shù)子檀,customerIndex代表某個(gè)特定的員工。

變量名中的常用對(duì)仗詞

對(duì)仗詞要使用正確,不然會(huì)產(chǎn)生歧義命锄。

常用對(duì)仗詞如下:

  • begin/end
  • first/last
  • locked/unlocked
  • min/max
  • next/previous
  • old/new
  • opened/closed
  • visible/invisible
  • source/target
  • source/destination
  • up/down

為特定類型的數(shù)據(jù)命名

為變量命名,除了通常的考慮事項(xiàng)之外偏化,為一些特定類型數(shù)據(jù)的命名還要求作出一些特殊的考慮脐恩。比如,循環(huán)變量侦讨、狀態(tài)變量驶冒、臨時(shí)變量等等。

為循環(huán)下標(biāo)命名

在循環(huán)中韵卤,最常見的下標(biāo)變量就是i,j,k骗污,如:

for(i = 0; i < arrLen; i++) {
    // ...
}

如果循環(huán)下標(biāo)變量只在循環(huán)內(nèi)部使用,那么如此使用是沒問(wèn)題的沈条,但是需忿,如果該變量需要在循環(huán)之外使用,那么就應(yīng)該為它取一個(gè)比i,j,k更有意義的名字蜡歹。舉個(gè)栗子屋厘,如果你從文件中讀取記錄,并且需要記下所讀取記錄的數(shù)量月而,那么類似于redcordCount這樣的名字就更合適:

recordCount = 0;
while ( moreScores() ) {
    score[recordCount] = GetNextScore();
    recordCount++;
}

// using recordCount

另一種情況就是嵌套循環(huán)汗洒,比較常犯的錯(cuò)誤就是在想寫j的時(shí)候?qū)懥薸,想用i的時(shí)候卻寫了j父款。

如果你使用了多個(gè)嵌套的循環(huán)溢谤,那么就應(yīng)該給循環(huán)變量賦予更長(zhǎng)的名字以提高可讀性:

for ( teamIndex = 0; teamIndex < teamCount; teamIndex++) {
    for ( eventIndex = 0; eventIndex < eventCount[teamIndex]; eventIndex++) {
        score[teamIndex][eventIndex] = 0;
    }
}

score[teamIndex][eventIndex] 比 score[i][j]給出的信息更多。

注意:如果你一定要用i憨攒、j世杀、k,那么不要把它們用于簡(jiǎn)單循環(huán)的循環(huán)下標(biāo)之外的任何場(chǎng)合肝集,避免造成誤解玫坛。要想避免這種問(wèn)題,最簡(jiǎn)單的方法就是使用更好的命名而不是i包晰,j湿镀,k。

為狀態(tài)變量命名

為狀態(tài)變量取一個(gè)比f(wàn)lag更好的名字伐憾。

最好是把標(biāo)記看作是狀態(tài)變量勉痴。標(biāo)記的名字中不應(yīng)該含有flag,因?yàn)槟銖闹薪z毫看不出該標(biāo)記是做什么的树肃。

為清楚可見蒸矛,標(biāo)記應(yīng)該使用枚舉變量、具名常量,或用作具名常量的全局變量來(lái)對(duì)其賦值雏掠。

看看下面比較差的標(biāo)記命名:

if ( flag ) ...
if ( statusFlag & 0x0F ) ...
if ( printFlag == 16 ) ...
if ( computeFlag == 0 ) ...

flag = 0x1;
statusFlag = 0x80;
printFlag = 16;
computeFlag = 0;

上面這段代碼反映不出能做什么斩祭,如果沒有文檔,不知道statusFlag = 0x80的含義是什么乡话。下面是作用相同但更為清晰的代碼:

if ( dataReady ) ...
if ( characterType & PRINTABLE_CHAR ) ...
if ( reportType == ReportTyoe_Annual ) ...
if ( recalcNeeded == false ) ...

dataReady = true;
characterType = CONTRAL_CHARACTER;
reportType = ReportType_Annual;
recalNeeded = false;

這段代碼更加清晰摧玫。而且說(shuō)明你可以結(jié)合枚舉類型和預(yù)定義的具名常量來(lái)使用這種方法。

如果你發(fā)現(xiàn)自己需要猜測(cè)某段代碼的含義的時(shí)候绑青,就該考慮為變量重新命名诬像。代碼應(yīng)該盡可能直接讀懂。

為臨時(shí)變量命名

臨時(shí)變量常用于存儲(chǔ)計(jì)算的中間結(jié)果闸婴,作為臨時(shí)占位符坏挠,以及存儲(chǔ)內(nèi)部值。它們常被賦予temp邪乍,tmp降狠,x或者其他一些模糊且缺乏描述性的名字。通常庇楞,臨時(shí)變量是一個(gè)信號(hào)喊熟,表明程序緣還沒有完全把問(wèn)題弄清楚。而且姐刁,由于這些變量被正式地賦予了一種“臨時(shí)”狀態(tài)芥牌,因此程序員會(huì)傾向于比其他變量更為隨意地對(duì)待這些變量,從而增加了出錯(cuò)的可能聂使。

警惕臨時(shí)變量

臨時(shí)地保存一些變量是很有必要的壁拉。但無(wú)論從哪種角度看,程序中的大多數(shù)變量都是臨時(shí)性的柏靶。把其中幾個(gè)稱為臨時(shí)的弃理,可能表明你還沒有弄清它們的實(shí)際用途∈候眩看看下面的示例:

temp = sqrt( b^2 - 4*a*c );
root[0] = ( -b + temp ) / ( 2*a );
root[1] = ( -b - temp ) / ( 2*a );

更好的做法:

discriminant = sqrt( b^2 - 4*a*c );
root[0] = ( -b + discriminant ) / ( 2*a );
root[1] = ( -b - discriminant ) / ( 2*a );

discriminant痘昌,判別式

為布爾變量命名

典型的布爾變量名:

  • done
  • error
  • found
  • success/ok

給布爾變量賦予隱含“真/假”含義的名字。像done和success一樣炬转,它們的值不是true就是false辆苔,表示某件事情完成了或者沒有完成扼劈;成功或者失敗骑冗。另一方面遥倦,想status這樣的名字卻是很糟的布爾變量名烟央,因?yàn)樗鼈儧]有明確的true或者false。status是true反映的是什么含義呢哩照?表示某件事情擁有一個(gè)狀態(tài)嗎次伶?然而柱彻,每件事情都有狀態(tài)惕虑。true表明某件事情的狀態(tài)是OK嗎溃蔫?或者說(shuō)false表明沒有任何錯(cuò)誤嗎健提?對(duì)于status,你什么都說(shuō)不出伟叛。

為了更好的效果私痹,可以把status命名為error或者statusOK。

有時(shí)统刮,也可以在布爾變量名前加上Is紊遵。這樣,變量名就成了一個(gè)問(wèn)題:isDone?isError?isFound?用true或false回答問(wèn)題也就為該變量給出了取值侥蒙。優(yōu)點(diǎn)是不能用于那些模糊不清的名字暗膜,比如:isStatus?毫無(wú)意義。缺點(diǎn)就是降低了簡(jiǎn)單邏輯表達(dá)式的可讀性:if(isFound)的可讀性要略差于if(Found)鞭衩。

使用肯定的布爾變量名学搜。避免雙重否定:not notFound。

為枚舉類型命名

在使用枚舉類型的時(shí)候论衍,可以通過(guò)使用組前綴瑞佩,如Color_,Planet_或者M(jìn)onth_來(lái)明確標(biāo)識(shí)該類型的成員都同屬于一個(gè)組坯台。比如:

Public Enum Color
    Color_Red
    Color_Green
    Color_Blue
End Enum

Public Enum Planet
    Planet_Earth
    Planet_Mars
    Planet_Venus
End Enum

在有些編程語(yǔ)言里炬丸,枚舉類型的處理很像類,枚舉類型也總是被冠以枚舉名字前綴蜒蕾,比如Color.Color_Red或者Planet.Planet_Earth稠炬。如果你正在使用這樣的編程語(yǔ)言,那么重復(fù)上述前綴的意義就不大了滥搭,可以簡(jiǎn)化為Color.Red和Planet.Earth酸纲。

為常量命名

在具名常量時(shí),應(yīng)該根據(jù)該常量所表示的含義瑟匆,而不是該常量所具有的數(shù)值為該抽象事物命名闽坡。比如FIVE是個(gè)很糟糕的常量名,CYCLES_NEEDED是個(gè)不錯(cuò)的名字愁溜。

命名規(guī)則的力量

很多程序員會(huì)抵制標(biāo)準(zhǔn)和約定(有時(shí)我也會(huì)這樣)疾嗅,并且有很好的理由:有些標(biāo)準(zhǔn)和約定非常刻板并且低效--它們會(huì)毀壞創(chuàng)造性和程序質(zhì)量冕象。

為什么要有規(guī)則

  • 要求你更多地按規(guī)矩行事代承。集中精力關(guān)注代碼更重要的特征;
  • 有助于在項(xiàng)目之間傳遞知識(shí)渐扮;
  • 有助于在新項(xiàng)目中更快速地學(xué)習(xí)代碼论悴;
  • 有助于減少名字增生掖棉,在沒有規(guī)則下,很容易給同一個(gè)對(duì)象起兩個(gè)不同的名字膀估;
  • 彌補(bǔ)編程語(yǔ)言的不足之處幔亥;
  • 強(qiáng)調(diào)相關(guān)變量之間的關(guān)系。

關(guān)鍵是察纯,采用任何一項(xiàng)規(guī)則都要好于沒有規(guī)則帕棉。規(guī)則可能是武斷的。命名規(guī)則的威力并非來(lái)源于你所采取的某個(gè)特定規(guī)則饼记,而是來(lái)源于以下事實(shí):規(guī)則的存在為你的代碼增加了結(jié)構(gòu)香伴,減少了你需要考慮的事情。

何時(shí)采用命名規(guī)則

  • 多個(gè)程序員合作開發(fā)一個(gè)項(xiàng)目時(shí)
  • 計(jì)劃把一個(gè)程序轉(zhuǎn)交給另一位程序員來(lái)修改和維護(hù)的時(shí)候
  • 你所在組織中的其他程序員評(píng)估你寫的程序的時(shí)候
  • 當(dāng)你寫的程序規(guī)模過(guò)大具则,以致于你無(wú)法在腦海里同時(shí)了解事情的全貌即纲,而必須分而治之的時(shí)候
  • 你寫的程序生命期足夠長(zhǎng),長(zhǎng)到你可能會(huì)在把它擱置幾個(gè)星期或幾個(gè)月之后又重新啟動(dòng)有關(guān)該程序的工作時(shí)
  • 當(dāng)在一個(gè)項(xiàng)目中存在一些不常見的術(shù)語(yǔ)乡洼,并且你希望在編寫代碼階段使用標(biāo)準(zhǔn)的術(shù)語(yǔ)或縮寫的時(shí)候

非正式命名規(guī)則

盡管上面介紹了很多比較標(biāo)準(zhǔn)的命名規(guī)則崇裁,但是大多數(shù)項(xiàng)目采用的都是相對(duì)非正式的命名規(guī)則匕坯。

與語(yǔ)言無(wú)關(guān)的命名規(guī)則的指導(dǎo)原則

  • 區(qū)分變量名和子程序名字
  • 區(qū)分類和對(duì)象
  • 標(biāo)識(shí)全局變量
  • 標(biāo)識(shí)成員變量
  • 標(biāo)識(shí)類型聲明
  • 標(biāo)識(shí)具名常量
  • 標(biāo)識(shí)枚舉類型的元素
  • 在不能保證輸入?yún)?shù)只讀的語(yǔ)言里標(biāo)識(shí)只讀參數(shù)
  • 格式化命名以提高可讀性

盡量不要混用上述方法束昵,那樣會(huì)使代碼更難閱讀。老老實(shí)實(shí)地堅(jiān)持使用其中任意一種提高可讀性的方法葛峻,你的代碼質(zhì)量一定會(huì)有所改善锹雏。

與語(yǔ)言相關(guān)的命名規(guī)則的指導(dǎo)原則

應(yīng)該遵循你所用語(yǔ)言的命名規(guī)則。對(duì)于大多數(shù)語(yǔ)言术奖,你都可以找到描述其風(fēng)格原則的參考書礁遵,下面給出C的指導(dǎo)原則。

C的命名規(guī)則

  • c和ch是字符變量
  • i和j是整數(shù)下標(biāo)
  • n表示某物的數(shù)量
  • p是指針
  • s是字符串
  • 預(yù)處理宏全部大寫采记,通常包括typedef
  • 變量名和子程序名全部小寫
  • 下劃線用作分隔符佣耐,如:letters_in_lowercase

標(biāo)準(zhǔn)前綴

對(duì)具有通用含義的前綴標(biāo)準(zhǔn)化,為數(shù)據(jù)命名提供了一種簡(jiǎn)潔唧龄、一致并且可讀性好的方法兼砖。

標(biāo)準(zhǔn)化的前綴由兩部分組成:用戶自定義類型(UDT)的縮寫和語(yǔ)義前綴。

用戶自定義類型縮寫

UDT縮寫可以標(biāo)識(shí)被命名對(duì)象或變量的數(shù)據(jù)類型既棺。UDT縮寫通常不會(huì)表示任何由編程語(yǔ)言所提供的預(yù)置數(shù)據(jù)類型讽挟。下面列出一份UDT示例。

UDT縮寫 含義
ch 字符(Character)
doc 文檔(Document)
pa 段落(Paragraph)
scr 屏幕區(qū)域(Screen region)
sel 選中范圍(Selection)
wn 窗體(Window)

可以使用上表列出的UDT類型定義下面這樣的數(shù)據(jù)聲明:

CH chCursorPosition;
SCR srcUserWorkSpace;
DOC docActive;
PA firstPaActiveDocument;
PA lastPaActiveDocument;
WN wnMain;

語(yǔ)義前綴

語(yǔ)義前綴比UDT更進(jìn)一步丸冕,它描述了變量或者對(duì)象是如何使用的耽梅。而且語(yǔ)義前綴不會(huì)根據(jù)項(xiàng)目的不同而不同,對(duì)于不同的項(xiàng)目均是標(biāo)準(zhǔn)的胖烛。下面列出一組標(biāo)準(zhǔn)的語(yǔ)義前綴眼姐。

語(yǔ)義前綴 含義
c 數(shù)量(count)
first 數(shù)組中需要處理的第一個(gè)元素
g 全局變量
i 數(shù)組的下標(biāo)
last 數(shù)組中需要處理的最后一個(gè)元素诅迷,與first對(duì)應(yīng)
lim 數(shù)組中需要處理的元素的上限,通常众旗,lim等于last+1
m 類一級(jí)的變量
max 數(shù)組或其他種類的列表中絕對(duì)的最后一個(gè)元素
min 數(shù)組或其他種類的列表中絕對(duì)的第一個(gè)元素
p 指針(pointer)

標(biāo)準(zhǔn)前綴的優(yōu)劣

  • 能更為精確地描述一些含義比較模糊的名字
  • 使名字變得更加緊湊

缺陷:程序員在使用前綴的同時(shí)忽略給變量其有意義的名字竟贯。

創(chuàng)建具備可讀性的短名字

如果環(huán)境真的要求你創(chuàng)建簡(jiǎn)短的名字,請(qǐng)注意有些縮短名字的方法要好于其他的方法逝钥。

縮寫的一般指導(dǎo)原則

下面列出幾項(xiàng)用于創(chuàng)建縮寫的指導(dǎo)原則屑那。其中一些原則彼此沖突,所以不要試圖同時(shí)應(yīng)用所有的原則艘款。

  • 使用標(biāo)準(zhǔn)的縮寫
  • 去掉所有非前置元音(computer => cmptr, screen => scrn, apple => appl, interger => intgr)
  • 去掉虛詞and持际,or,the等
  • 使用每個(gè)單詞的第一個(gè)或前幾個(gè)字母
  • 統(tǒng)一在每個(gè)單詞的第一哗咆、第二或者第三個(gè)字母后截?cái)?/li>
  • 保留每個(gè)單詞的第一個(gè)和最后一個(gè)字母
  • 使用名字中的每一個(gè)重要單詞蜘欲,最多不超過(guò)三個(gè)
  • 去掉無(wú)用的后綴--ing,ed等
  • 保留每個(gè)音節(jié)中最引人注意的發(fā)音
  • 確保不要改變變量的含義
  • 反復(fù)使用上述技術(shù)晌柬,直到把每個(gè)變量名的長(zhǎng)度縮減到了8-20個(gè)字符姥份。

語(yǔ)音縮寫

有些人倡導(dǎo)基于單詞的發(fā)音而不是拼寫來(lái)創(chuàng)建縮寫,比如skating => sk8ing, before => b4...但是不提倡這么做年碘。

有關(guān)縮寫的評(píng)論

下面是一些能夠用來(lái)避免犯錯(cuò)的規(guī)則

  • 不要用從每個(gè)單詞中刪除一個(gè)字符的方式來(lái)縮寫澈歉,要么刪除不止一個(gè)字符,要么就把單詞拼寫完整
  • 縮寫要一致屿衅,比如:要么全部使用Num埃难,要么全用No,不要兩個(gè)都用
  • 創(chuàng)建你能讀出來(lái)到的名字涤久,比如:用xPos而不用xPstn涡尘。可以借助電話來(lái)測(cè)試--如果你無(wú)法在電話中向他人讀出你的代碼响迂,就請(qǐng)重新給變量起一個(gè)更清晰的名字吧
  • 避免使用容易看錯(cuò)或者讀錯(cuò)的字符組合考抄,比如ENDB和BEND,為了表示B的結(jié)尾蔗彤,可以用一種好的分隔技術(shù)來(lái)命名:b_end/BEnd
  • 使用辭典來(lái)解決命名沖突川梅,使用近義詞來(lái)解決命名沖突
  • 在代碼里用縮寫對(duì)照表解釋極短的名字的含義

應(yīng)該避免的名字

  • 避免使用令人誤解的名字或縮寫,比如將"Fig and Almond Season"縮寫為FALSE
  • 避免使用具有相似含義的名字
  • 避免使用具有不同含義但卻有相似名字的變量
  • 避免使用發(fā)音相近的名字
  • 避免在名字中使用數(shù)字
  • 避免在名字中拼錯(cuò)單詞
  • 避免使用英語(yǔ)中常常拼錯(cuò)的單詞
  • 不要僅靠大小寫來(lái)區(qū)分變量名
  • 避免使用多種自然語(yǔ)言
  • 避免使用標(biāo)準(zhǔn)類型幕与、變量和子程序的名字
  • 不要使用與變量含義完全無(wú)關(guān)的名字
  • 避免在名字中包含易混淆的字符挑势,比如1(數(shù)字1)和l(字母l),0(數(shù)字0)和O(字母O)

總結(jié)

好的變量名是提高程序可讀性的一項(xiàng)關(guān)鍵要素。代碼閱讀的次數(shù)遠(yuǎn)遠(yuǎn)多于編寫的次數(shù)啦鸣,確保代碼中所取的名字更側(cè)重于閱讀方便而不是編寫方便潮饱。選擇一種規(guī)則,并堅(jiān)持遵循該規(guī)則诫给。

原創(chuàng)文章香拉,文筆有限啦扬,才疏學(xué)淺,文中若有不正之處凫碌,萬(wàn)望告知扑毡。

如果本文對(duì)你有幫助,請(qǐng)點(diǎn)下推薦吧盛险,謝謝_

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瞄摊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子苦掘,更是在濱河造成了極大的恐慌换帜,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹤啡,死亡現(xiàn)場(chǎng)離奇詭異惯驼,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)递瑰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門祟牲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人抖部,你說(shuō)我怎么就攤上這事说贝。” “怎么了您朽?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵狂丝,是天一觀的道長(zhǎng)换淆。 經(jīng)常有香客問(wèn)我哗总,道長(zhǎng),這世上最難降的妖魔是什么倍试? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任讯屈,我火速辦了婚禮,結(jié)果婚禮上县习,老公的妹妹穿的比我還像新娘涮母。我一直安慰自己,他們只是感情好躁愿,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布叛本。 她就那樣靜靜地躺著,像睡著了一般彤钟。 火紅的嫁衣襯著肌膚如雪来候。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天逸雹,我揣著相機(jī)與錄音营搅,去河邊找鬼云挟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛转质,可吹牛的內(nèi)容都是我干的园欣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼休蟹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沸枯!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起赂弓,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤辉饱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后拣展,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體彭沼,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年备埃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姓惑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡按脚,死狀恐怖于毙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辅搬,我是刑警寧澤唯沮,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站堪遂,受9級(jí)特大地震影響介蛉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜溶褪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一币旧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧猿妈,春花似錦吹菱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間艘刚,已是汗流浹背速勇。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工前痘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凛捏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓芹缔,卻偏偏與公主長(zhǎng)得像坯癣,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子最欠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 第一部分 打好基礎(chǔ) Laying the Foundation 第一章 歡迎進(jìn)入軟件構(gòu)建的世界 Welcome t...
    白樺葉閱讀 4,639評(píng)論 0 17
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理示罗,服務(wù)發(fā)現(xiàn),斷路器芝硬,智...
    卡卡羅2017閱讀 134,701評(píng)論 18 139
  • 1蚜点、引言 數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程中表、字段等的命名規(guī)范也算是設(shè)計(jì)規(guī)范的一部分拌阴,不過(guò)設(shè)計(jì)規(guī)范更多的是為了確保數(shù)據(jù)庫(kù)設(shè)計(jì)的合理...
    SnowflakeCloud閱讀 41,012評(píng)論 0 48
  • 凡事謙虛,溫柔纤壁,忍耐左刽,用愛心互相寬容 ――To others 就想看一下自己睡得早,昨晚他發(fā)...
    糊涂孩子閱讀 419評(píng)論 0 0