写出更易懂漂亮的代码

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

 

 

posted @ 2013-05-23 19:56  javawebsoa  Views(226)  Comments(0Edit  收藏  举报