一份代码,写或者修改它的次数远远低于阅读它的次数。在多人合作的环境,一份可读性良好的代码能够节省不少的时间。当自己写的代码被技术leader review 的时候,代码的可读性与整洁就反应着你在别人眼中的审美和素养。培养良好的编码习惯,不仅提高自己的开发效率,也可以避免不必要的解释以及由此引来的摩擦。

    1 全局变量的声明

    程序中所有的全局变量,都可以放到一个类里面,比如起名为Global,在程序入口初始化。对于某些进入入口就需要有值的变量,则定义成静态变量。

    2 仔细定义类的方法

    public型的函数应该有良好的定义——函数名称和参数列表都应该语义明确,最好加上适当的注释,并且不能省略参数名。而private型的函数,由于不对外,可以省略参数名。这一点很关键,它体现了面向接口的编程思想。

    3 类的头文件应该有说明

    类的定义文件中,应该包含有这个类的说明性文字——类的功能,方法的功能。就好比是一个使用说明书。

    下面的这个类定义,如果没有注释,你可能非常费劲的才能看懂

//接口Map模板

//IDispatchImplMapImpl
//Created On :2013-3-20
//class OBJ_T:接口对象
//class T:链表接口对象
//这个结构用来方便的查找数据,用Map实现以提高效率。Delete函数没有实现
// Key1 是 map 的 key
// Key 是一个数据类型,用于定义字符串接口,字符串类型用tstring类型作为Key, 除字符串,Key1 应该 与Key是一个类型
// Add:insert一个元素
// GetCount : 返回元素个数
// GetValue 根据Key取接口
// GetValueLine:按照iterator遍历取元素
// Clear: 释放接口,清空Map

template <class Key1,class Key,class OBJ_T, class T, const IID* piid, const GUID* plibid = &CComModule::m_libid, WORD wMajor = 1,
WORD wMinor = 0, class tihclass = CComTypeInfoHolder>
class ATL_NO_VTABLE IDispatchImplMapImpl : public IDispatchImpl<T, piid, plibid, wMajor, wMinor, tihclass>
{
public:
~IDispatchImplMapImpl() { Clear(); }

private:

std::map<Key1, OBJ_T*> m_mapParam;

public:
//添加
STDMETHOD(Add)(Key key,OBJ_T* obj)
{
ATLASSERT(obj != NULL);
obj->AddRef();
Key1 strRealkey = key;
m_mapParam.insert(std::make_pair(strRealkey, obj));
return S_OK;
}

//获得数量
STDMETHOD(GetCount)(/*[out, retval]*/ long *pVal)
{
*pVal = m_mapParam.size();
return S_OK;
}

STDMETHOD(GetValue)(Key key, OBJ_T** obj, /*[out, retval]*/ BOOL *pVal)
{
ATLASSERT(obj != NULL);
*pVal = FALSE;
Key1 findstr = key;
std::map<Key1, OBJ_T*>::iterator ite = m_mapParam.find(findstr);
if(ite != m_mapParam.end()){
*obj = ite->second;
(*obj)->AddRef();
*pVal = TRUE;
}
return S_OK;
}
STDMETHOD(GetValueLine)(Key key, OBJ_T** obj, /*[out, retval]*/ BOOL *pVal)
{// 不要使用这个函数
*pVal = FALSE;
Key1 findstr = key;
std::map<Key1, OBJ_T*>::iterator ite = m_mapParam.begin();
for(;ite != m_mapParam.end();ite++){
if(ite->first == findstr){
*obj = ite->second;
(*obj)->AddRef();
*pVal = TRUE;
break;
}
}
return S_OK;
}
//清除所有
STDMETHOD(Clear)()
{
OBJ_T* element = NULL;
map<Key1,OBJ_T*>::iterator ite = m_mapParam.begin();
for(ite; ite != m_mapParam.end(); ite++){
element = ite->second;
if(element){
element->Release();
}
}
m_mapParam.clear();
return S_OK;
}
};


    4 大括号的对齐方式

void fun()
{
if()
{
if()
{

}
}
}

void fun()
{
if(){
if(){

}
}
}


 

    这两中方法都能带来一致并且整洁的代码风格。如果使用VC开发,下面的这种效率更高,代码也更加紧凑一些。易读性两者差不多。如果一个文件很大,采用下面的方式能有效减少行数。