如果汉语背后没有文化,文化背后没有思想,思想背后没有精神,光TMD编造老娘和乔布斯没有说过的话,那中国永远不会是一个伟大的国家。——撒切尔夫人

《代码整洁之道》读书笔记三

分隔指令与询问

函数要行做什么事( 例如 user.setName('xxx') )、要么回答什么事( 例如 user.isVip() )。一个函数里不要把两件事都干了。

如何写出好函数

  • 分解函数
  • 修改名称
  • 消除重复

注释

好的注释

  • 法律信息
  • 警示性注释
  • TODO 注释虽好,但也要定期查看,删除不再需要的

坏的注释

  • 循规式注释。 例如每个函数都要有Javadoc或每个变量都要有注释的规矩全然是愚蠢可笑的。这类注释徒然让代码变得散乱
  • 注释掉的代码。 现在已经有源代码控制系统,不要的代码应该立即删掉
  • 不明显的联系。 注释及其描述的代码之间的联系应该显而易见。注释的作用是解释未能自行解释的代码。如果注释本身还需要解释,就太遗憾了
  • 切断代码间的联系

    // bad
    public class ReportConfig {
        //
        // The class name of the reporter listener
        //
        private String m_className;
        
        //
        //The properties of the reporter listener
        //
        private List<Property> m_properties = new ArrayList<Property>();
        
        public void addProperty(Property property) {
            m_properties.add(property);
        }
    }
    
    // good
    public class ReportConfig {
        private String m_className;
        private List<Property> m_properties = new ArrayList<Property>();
        
        public void addProperty(Property property) {
            m_properties.add(property);
        }
    }

格式

垂直距离

  • 变量声名。 大多数情况下变量声名应该尽可能靠近其使用的位置。但是在类内,变量声名应该统一放在顶部,因为这样读者可以一眼看出这个类有什么变量。
  • 相关函数。 若某个函数调用了另一个函数,就应该把它们放到一起,而且调用者应该尽可能放在被调用者上面。这样程序就有个自然顺序。
  • 概念相关。 概念相关的代码应该放到一起。相关性越强,彼此之间的距离就该越短

    public    class Assert {
        static public void assertTrue(String message, boolean codition(){}
        static public void assertTrue(boolean codition(){}
        static public void assertFalse(String message, boolean codition(){}
        // .....
    }

    这些函数有关极强的概念相关性,因为他们拥有共同的命名模式,执行同一基础任务的不同变种。互相调用是第二位的。即便没有互相调用。也应该放在一起。

posted @ 2021-10-30 15:16  崤函隳  阅读(73)  评论(0)    收藏  举报