代码整洁之道精华——第五章 格式

来源:互联网 发布:c语言经典笔试题 编辑:程序博客网 时间:2024/06/01 10:25

阅读本文有两种原因:第一,你是个程序员;第二,你想成为更好的程序员。你如果想成为更好的程序员,那就请细细品味文章内容,它绝不会让你失望。
代码整洁之道教给大家如何编写整洁的代码,而不仅仅是能运行的代码,这对于编程者而言很重要。我在读这本书的第一遍时没什么感觉,但在读第二遍时觉得它确实挺不错的,如果有机会的话我会读第三遍。下面是我在读书过程中摘录的精华内容,希望大家认真对待。各位看官如果读完本文觉得书中的精华内容挺合自己的胃口,那就可以抽出时间认真地读一下这本书。

1、代码格式很重要、不可忽略,必须严肃对待。代码格式关乎沟通,而沟通是专业开发者的头等大事。
或许你认为“让代码能工作”才是专业开发者的头等大事。然而你今天编写的功能,极有可能在下一版中被修改,但代码的可读性却会对以后可能发生的修改行为产生深远影响。原始代码修改之后很久,其代码风格和可读性仍会影响到可维护性和扩展性。即便代码已不复存在,你的风格和律条仍保留下来。
2、关系密切的概念应该互相靠近,显然,这条规则不适用于分布在不同文件中的概念。除非有很好的理由,否则不要把关系密切的概念放到不同的文件中。实际上,这也是避免使用protected变量的理由之一。
对于那些关系密切、放置于同一源文件中的概念,它们之间的区隔应该成为相互之间密切程度的衡量标准。应避免让读者在源文件和类之间跳来跳去。
3、变量声明应尽可能靠近其使用位置
a. 如果函数很短,那本地变量应该在函数的顶部出现。

private static void readPreference(){   InputStream is = null;    try{        is = new FileInputStream(getPreferencesFile());        setPreferences(new Properties(getPrefeences()));        getPreferences().load(is);    }    catch(IOException ex){        if(is!=null) is.cloae();    }}

b. 循环中的控制变量应该总是在循环语句中声明

public int countTestCases(){   int count=0;    for(Test each : tests){        count += each.countTestCases();    }    return count;}

c. 偶尔在较长的函数中,变量也可能在某个代码块顶部,或循环之前声明

......for(XmlTest test : m_suite.getTests()){    TestRunner tr = m_runnerFactory.newTestRunner(this,test);    tr.addListener(m_textReporter);    m_testRunner.add(tr);    invoker = tr.getInvoker();    for(ITestNGMethod m : tr.getBeforeSuiteMethods()){        beforeSuiteMethods.put(m.getMethod(),m);    }    for(ITestNGMethod m : tr.getAfterSuiteMethods()){        afterSuiteMethods.put(m.getMethod(),m);    }}......

如果函数真写成这样,那么我们首先应该考虑缩短它,而不是考虑变量写在哪里。
d. 实体变量应该在类的顶部声明。
4、相关函数。若函数调用了另外一个,就应该把它们放到一起,而且调用者应该尽可能放在被调用者上面。这样,程序就有个自然地自上而下的顺序。
5、概念相关。概念相关的代码应该放在一起。相关性越强,彼此之间的距离就该越短。如上所述,相关性应建立在直接依赖的基础上,如函数建调用,或函数使用某个变量。但也有其他相关性的可能,例如:执行相似操作的一组函数。

public class Assert{    public static void assertTrue(Boolean condition)    {   assertTrue(null,condition);    }    public static void assertTrue(string message,Boolean condition)    {   if(!condition) fail(message);    }    public static void assertFalse(Boolean condition)    {   assert(null,condition);    }    public static void assertFalse(string message,Boolean condition)    {   assertTrue(message,!condition);    }}

这些函数有着极强的概念相关性,执行同一基础任务的不同变种。他们之间即便没有互相调用,也应该放在一起。互相调用是第二位的。
6、函数行数尽量控制在30行以内,类行数尽量控制在200~500行之间。

抛开所有细节不谈,代码整洁之道总体来说可以分为以下7点:

  • 运行所有测试
  • 减少重复代码
  • 提高表达力
  • 提早构建简单抽象
  • 类和方法都只做好一件事
  • 尽量减少类和方法的数量
  • 努力,让营地比你来时更干净。努力,让世界比你来时更干净。努力,让代码比你签出时更干净。
1 0
原创粉丝点击