• 写出更易懂漂亮的代码


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

  • 相关阅读:
    Tarjan算法求双连通分量
    Tarjan
    前端技术实现js图片水印
    记录一下ionic canvas图片,还有canvas里面的图片跨域的问题
    ionic cordova screenshot 使用和操作
    关于ionic2 更新到ionic3 后组件不能用的解决方案
    背景图处理,这是个好东西记录一下
    radio样式的写法,单选和多选如何快速的改变默认样式,纯CSS,
    ionic使用cordova插件中的Screenshot截图分享功能
    ionic中执行pop返回上一个页面,还需要执行操作
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3095464.html
Copyright © 2020-2023  润新知