《代码整洁之道》读书笔记三
分隔指令与询问
函数要行做什么事( 例如 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(){} // ..... }这些函数有关极强的概念相关性,因为他们拥有共同的命名模式,执行同一基础任务的不同变种。互相调用是第二位的。即便没有互相调用。也应该放在一起。

浙公网安备 33010602011771号