在日常編程中最煩惱的就是給變量取名缓待,一段好代碼,既要能完美地運(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)下推薦吧盛险,謝謝_