更新时间:2017-04-23 15:10:59浏览次数:1+次
如何在代码中命名一直是一个问题,一些程序员总是用简化,短小或编码后的名字,使得只有他们自己才能看懂。看一些例子:
不好的代码:int d; //elapsed time in days
int ds;
int dsm;
int faid;
名字中“d”可以表示任何东西,程序员只能用注释来表明他的意图,不能仅用代码显示。而“faid”很容易导致误解为ID。int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;
避免会被误解的命名Customer[] customerList;
Table theTable;
变量“customerList”其实不是个list。它只是一个普通的数组(集合)。第二行中,“theTable”是一个Table类的对象,“the”这个词是个不必要的干扰。Customer[] customers;
Table customers;
适合的名字长度var theCustomersListWithAllCustomersIncludedWithoutFiler;
var list;
好的名字应该包含足够的单词来表达意思,但是任何不必要的词都会使名字变长,变得难以理解。名称越短越好,前提是能在上下文中表达完整的意思。var allCustomers;
var customersInOrder;
符合“代码规范”,可以更好的帮助理解const int maxcount = 1;
bool change = true;
public interface Repository;
private string Name;
public class personaddress;
void getallorders();
因为代码规范,当你只看一部分代码时,你就可以理解这里面的变量类型和含义,比如,你看到一个变量“_name”,你就可以知道这是当前类中的一个私有变量。所以,你写出的任何代码都要遵从规范。const int MAXCOUNT = 1;
bool isChanged = true;
public interface IRepository;
private string _name;
public class PersonAddress;
void GetAllOrders();
一个概念不要用多种词表示,一个词也不要表示多种概念//1.
void LoadSingleData();
void FetchDataFiltered();
void GeteAllData();
//2.
void SetDataToView();
void SetObjectValue(int value);
在第一段代码中,这个程序员想表达“获取数据”这个概念,但他用了很多不同的词”load”,”fetch”,”get”。在一个场景下,应该用一个统一的词表示这个概念。在第二段代码中,”set”一词被用作了两个概念,第一个是“取出数据显示”,第二个是“为一个对象赋值”,应该用不同的词表示这两个不同的概念。//1.
void GetSingleData();
void GetDataFiltered();
void GetAllData();
//2.
void LoadDataToView();
void SetObjectValue(int value);
使用某一领域背景中有意义的名字public class EntitiesRelation
{
Entity o1;
Entity o2;
}
当你在编写针对某个领域的代码时,你应该使用领域背景相关的名字。如果以后有另外的人(不仅是程序员,也许是测试人员)接触你的代码时,他能轻松的理解你与背景相关的代码。所以,程序员首先应该考虑的是领域背景问题,之后才是如何得出解决方案。public class ProductWithCategory
{
Entity product;
Entity category;
}
使用上下文环境下有意义的名字string addressCity;
string addressHomeNumber;
string addressPostCode;
在大多数情况中,“邮政编码”(PostCode)是地址的一部分,很显然,邮政编码不能单独使用(除非你是在开发一个专门处理邮编的应用)。所以,没有必要在“PostCode”的前面加上“address”。而且,所有的这些信息都应该有一个上下文环境,在面向对象编程中,这里应该用一个“Address”类来表达这个地址信息。class Address
{
string city;
string homeNumber;
string postcode;
}
相关资讯