写出更易懂漂亮的代码
一份代码,写或者修改它的次数远远低于阅读它的次数。在多人合作的环境,一份可读性良好的代码能够节省不少的时间。当自己写的代码被技术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开发,下面的这种效率更高,代码也更加紧凑一些。易读性两者差不多。如果一个文件很大,采用下面的方式能有效减少行数。