为什么要遵守代码规范

几乎所有的软件开发公司,都有相应的代码规范,有些大公司,特别是大的外包公司(尤其是对日外包公司),其代码规范已经到了事无巨细的地步。但相信很多开发人员(包括我刚开始软件开发时),都会产生一些疑问:功能,性能无疑是最重要的,设计也很重要,为什么却要把这么多的精力放在代码规范上呢,仅仅是为了方便别人阅读代码,便于维护吗?这样一套套的代码规范真的可以加快开发速度吗?

在回答这些问题以前,先来看一下Wicket,Tapestry两个功能相类似的基类其中的代码节选。

来自Wicket1.3.3中org.apache.wicket.component的代码

/**

 * Called on very component after the page is rendered. It will call onAfterRender for it self

 * and its children.

 */

public final void afterRender()

{

// if the component has been previously attached via attach()

// detach it now

try

{

setFlag(FLAG_AFTER_RENDERINGtrue);

onAfterRender();

getApplication().notifyComponentOnAfterRenderListeners(this);

if (getFlag(FLAG_AFTER_RENDERING))

{

throw new IllegalStateException(Component.class.getName() +

" has not been properly detached. Something in the hierarchy of " +

getClass().getName() +

" has not called super.onAfterRender() in the override of onAfterRender() method");

}

// always detach children because components can be attached

// independently of their parents

onAfterRenderChildren();

}

finally

{

// this flag must always be set to false.

setFlag(FLAG_RENDERINGfalse);

}

}

来自Tapestry3.04基类org.apache.tapestry.AbstractComponent的代码

/** 

     *

     *  Returns a {@link Map} of all bindings for this component.  This implementation

     *  is expensive, since it has to merge the disassociated bindings (informal parameters,

     *  and parameters without a JavaBeans property) with the associated bindings (formal

     *  parameters with a JavaBeans property).

     *

     * @since 1.0.5

     *

     **/

    public Map getBindings()

    {

        Map result = new HashMap();

        // Add any informal parameters.

        if (_bindings != null)

            result.putAll(_bindings);

        // Now work on the formal parameters

        Iterator i = _specification.getParameterNames().iterator();

        while (i.hasNext())

        {

            String name = (String) i.next();

            if (result.containsKey(name))

                continue;

            IBinding binding = getBinding(name);

            if (binding != null)

                result.put(name, binding);

        }

        return result;

    }

很容易看出,以上的这几段代码,与公司的开发规范相比,也有很高的吻合度,事实上,Wicket和Tapestry的作者都是长期编写架构的开发和设计人员,是非常顶尖的开发人员,远非一般的高级工程师可比,但看这些代码,却没有多少技巧在其中,可以算的上代码规范很好的遵守者。很多国内很程序员经常会觉得,这些高手写的代码应该很难,很复杂。但事实告诉我们,大道至简,这么多的资深程序员甚至是架构师经过多年的编写代码,却都达到了同样的规范,可谓殊途同归。为什么呢?这说明,只有这些来自经验的规范才真正的体现了水平,才是多代程序员的精华所在。当开发人员很好的遵守代码规范来编写代码时,才可以慢慢的体会到规则,才会体会到设计。可以想像一下,如果遵守代码规范,一个方法不得超出50行代码,那么大量的if else就不可能出现,而要代之以各种设计(如工厂,策略等设计模式)来解决问题。

大家如果有兴趣看一下他们的源代码,可以去Apache网站下载,他们的代码中只有很少的一部分,估计不足5%的代码才会超出50行/每方法,违反常规的代码规范的内容也会非常的少。

开发规范不仅不是一种可有可无的东西,反而是历代程序员经过多年的开发所磨炼出来的经验总结。对于程序员来讲,想写好代码,从遵守规范开始。

最后以小说里的一句话来结束本文:技巧的本质就是规则,而规则使人成长

<!--EndFragment-->

你可能感兴趣的:(apache,设计模式,spring,tapestry,wicket)