中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

如何給程序中的變量起個(gè)好名字

2018-07-20    來(lái)源:編程學(xué)習(xí)網(wǎng)

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

新手程序員總是把大量的時(shí)間用在學(xué)習(xí)編程語(yǔ)言上,學(xué)習(xí)語(yǔ)法,技術(shù)和開(kāi)發(fā)工具,他們認(rèn)為如果掌握了這些就是一個(gè)優(yōu)秀的程序員。但是,實(shí)際的編程不僅是要精通技術(shù)和工具,關(guān)鍵是要對(duì)某個(gè)特定領(lǐng)域的問(wèn)題給出解決方案,而且通常要和其他程序員一起合作完成。因此,很重要的一點(diǎn)就是,程序員要用代碼準(zhǔn)確的表達(dá)出自己的思想,從而讓其他人明白程序的含義。


編程大師Robert C. Martin在《Clean Code》中說(shuō)道:“使用注釋是為了彌補(bǔ)我們代碼表意上的不足!边@句話就意味著如果你的代碼需要添加注釋,就說(shuō)明你的代碼還不夠好。同時(shí),這也說(shuō)明如果不能在單純的代碼中展示你對(duì)問(wèn)題或算法的理解是非常失敗的,你只能依靠一些注釋說(shuō)明你的想法,而不能僅用代碼顯示。優(yōu)秀的代碼可以讓人在沒(méi)有注釋的情況下看懂并理解,好的編程習(xí)慣也是讓所有必要的信息都在代碼中展示出來(lái)。


在編程理論中,有一個(gè)概念叫做“可以自我描述的源代碼”,尤其是在那些有著較松的命名規(guī)則的環(huán)境下。引入這個(gè)概念,就是要增加代碼的可讀性,使代碼更容易被維護(hù)和擴(kuò)展。


下面我會(huì)對(duì)比一些“好的代碼”和“不清晰的代碼”。


命名時(shí)要展現(xiàn)你意圖


如何在代碼中命名一直是一個(gè)問(wèn)題,一些程序員總是用簡(jiǎn)化,短小或編碼后的名字,使得只有他們自己才能看懂。看一些例子:

不好的代碼:
int d; //elapsed time in days
int ds;
int dsm;
int faid;

名字中“d”可以表示任何東西,程序員只能用注釋來(lái)表明他的意圖,不能僅用代碼顯示。而“faid”很容易導(dǎo)致誤解為ID。

清晰的代碼:

int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;

避免會(huì)被誤解的命名


導(dǎo)致誤解的信息比沒(méi)有信息更糟糕,有些程序員喜歡“隱藏”一些重要信息,但更糟的是,他們有時(shí)會(huì)寫(xiě)出一些讓人誤解的代碼。

不好的代碼:
Customer[] customerList;
Table theTable;

變量“customerList”其實(shí)不是個(gè)list。它只是一個(gè)普通的數(shù)組(集合)。第二行中,“theTable”是一個(gè)Table類的對(duì)象,“the”這個(gè)詞是個(gè)不必要的干擾。


清晰的代碼:
Customer[] customers;
Table customers;

適合的名字長(zhǎng)度


在現(xiàn)代的編程語(yǔ)言中,很長(zhǎng)的變量名字是被允許的,你可以基本不受限制的去命名,但是這樣會(huì)導(dǎo)致命名的混亂。

不好的代碼:
var  theCustomersListWithAllCustomersIncludedWithoutFiler;
var  list;

好的名字應(yīng)該包含足夠的單詞來(lái)表達(dá)意思,但是任何不必要的詞都會(huì)使名字變長(zhǎng),變得難以理解。名稱越短越好,前提是能在上下文中表達(dá)完整的意思。

清晰的代碼:
var allCustomers;
var customersInOrder;

符合“代碼規(guī)范”,可以更好的幫助理解


所有的編程語(yǔ)言都有自己的“風(fēng)格”,叫做表示法。程序員應(yīng)該寫(xiě)出符合這種表示法的代碼,因?yàn)槠渌某绦騿T也知道這點(diǎn),并按這種風(fēng)格寫(xiě)程序。我們來(lái)看一個(gè)不符合表示法的不好的代碼例子。下面的這段代碼沒(méi)有遵循任何代碼標(biāo)準(zhǔn)(比如PascalCase, camelCase, Hungarian規(guī)范)。更糟糕的是,這里有一個(gè)無(wú)意義的bool型變量change,這是個(gè)描述動(dòng)作的動(dòng)詞,但這里的bool值應(yīng)該表示一種狀態(tài),所以這個(gè)變量應(yīng)該用一個(gè)形容詞來(lái)命名。

不好的代碼:
const int maxcount = 1;
bool change = true;

public interface Repository;
private string Name;
public class personaddress;

void getallorders();

因?yàn)榇a規(guī)范,當(dāng)你只看一部分代碼時(shí),你就可以理解這里面的變量類型和含義,比如,你看到一個(gè)變量“_name”,你就可以知道這是當(dāng)前類中的一個(gè)私有變量。所以,你寫(xiě)出的任何代碼都要遵從規(guī)范。


清晰的代碼:
const int MAXCOUNT = 1;
bool isChanged = true;

public interface IRepository;
private string _name;
public class PersonAddress;

void GetAllOrders();

一個(gè)概念不要用多種詞表示,一個(gè)詞也不要表示多種概念


定義場(chǎng)景中的概念很難,在軟件開(kāi)發(fā)過(guò)程中,程序員需要花費(fèi)很多時(shí)間去分析某一場(chǎng)景,并命名場(chǎng)景中的各種元素,這樣的工作永遠(yuǎn)都是讓程序員頭疼的事情。

不好的代碼:

//1.

void LoadSingleData();
void FetchDataFiltered();
void GeteAllData();

//2.
void SetDataToView();
void SetObjectValue(int value);


在第一段代碼中,這個(gè)程序員想表達(dá)“獲取數(shù)據(jù)”這個(gè)概念,但他用了很多不同的詞”load”,”fetch”,”get”。在一個(gè)場(chǎng)景下,應(yīng)該用一個(gè)統(tǒng)一的詞表示這個(gè)概念。在第二段代碼中,”set”一詞被用作了兩個(gè)概念,第一個(gè)是“取出數(shù)據(jù)顯示”,第二個(gè)是“為一個(gè)對(duì)象賦值”,應(yīng)該用不同的詞表示這兩個(gè)不同的概念。

清晰的代碼:

//1.

void GetSingleData();
void GetDataFiltered();
void GetAllData();

//2.

void LoadDataToView();
void SetObjectValue(int value);



使用某一領(lǐng)域背景中有意義的名字


程序員寫(xiě)的所有代碼都是和某一領(lǐng)域背景相關(guān)的,為了讓寫(xiě)出的代碼可以讓個(gè)更多的人理解,最好使用該領(lǐng)域背景下的名字。

不好的代碼:

public class EntitiesRelation

{
Entity o1;

Entity o2;

}



當(dāng)你在編寫(xiě)針對(duì)某個(gè)領(lǐng)域的代碼時(shí),你應(yīng)該使用領(lǐng)域背景相關(guān)的名字。如果以后有另外的人(不僅是程序員,也許是測(cè)試人員)接觸你的代碼時(shí),他能輕松的理解你與背景相關(guān)的代碼。所以,程序員首先應(yīng)該考慮的是領(lǐng)域背景問(wèn)題,之后才是如何得出解決方案。

清晰的代碼:

public class ProductWithCategory

{
Entity product;

Entity category;

}



使用上下文環(huán)境下有意義的名字


代碼里的名字都有自己的上下文,上下文對(duì)于理解一個(gè)代碼是很重要的,因?yàn)樗芴峁╊~外的信息。我們來(lái)看一個(gè)典型的“地址”上下文:

不好的代碼:

string addressCity;

string addressHomeNumber;

string addressPostCode;


在大多數(shù)情況中,“郵政編碼”(PostCode)是地址的一部分,很顯然,郵政編碼不能單獨(dú)使用(除非你是在開(kāi)發(fā)一個(gè)專門(mén)處理郵編的應(yīng)用)。所以,沒(méi)有必要在“PostCode”的前面加上“address”。而且,所有的這些信息都應(yīng)該有一個(gè)上下文環(huán)境,在面向?qū)ο缶幊讨,這里應(yīng)該用一個(gè)“Address”類來(lái)表達(dá)這個(gè)地址信息。

清晰的代碼:

class Address

{

string city;

string homeNumber;

string postcode;

}


總結(jié)


總結(jié)一下,作為一名程序員,你應(yīng)該:


1.起的名字是有意義的,可以表達(dá)一個(gè)概念;


2.要考慮名字的長(zhǎng)度,名稱中只有必要的信息;


3.符合“編碼規(guī)范”,幫助理解;


4.一個(gè)概念不要多種名字混用;


5.使用在背景領(lǐng)域和上下文中都有意義的名字。

標(biāo)簽: 代碼

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:學(xué)習(xí)蘋(píng)果Swift語(yǔ)言的一些在線資源(2014年9月10日更新)

下一篇:聊聊那些小眾手機(jī)操作系統(tǒng)