阅读本书有两种原因:第一,你是个程序员;第二,你想成为更好的程序员。很好。我们需要更好的程序员。
永远抛不掉代码,因为代码呈现了需求的细节。在某些层面上,这些细节无法被忽略或抽象,必须明确之。将需求明确到机器可以执行的细节程度,就是编程要做的事。
沼泽(wading)
代码整洁的艺术:
缺乏“代码感”的程序员,看混乱是混乱,无处着手。有“代码感”的程序员能从混乱中看出其他的可能与变化。“代码感”帮助程序员选出最好的方案,并指导程序员制订修改行动计划,按图索
骥
Bjarne Stroustrup,C++语言发明者:
优雅 高效
Dave Thomas,OTI 公司创始人,Eclipse 战略教父:
有一条是根本性的。整洁的代码总是看起来
像是某位特别在意它的人写的。几乎没有改进的余地。
作者总结
简单代码,依其重要顺序:
— 能通过所有测试;
— 没有重复代码;
— 体现系统中的全部设计理念;
— 包括尽量少的实体,比如类、方法、函数等。
消除重复和提高表达力,提早构建简单抽象
名副其实
避免误导
做有意义的区分(废话都是冗余)
使用读的出来的名称(选择恰当的英语词)
使用可搜索的名称
为单字母名称仅用于短方法中的本地变量。名称长短应与其作用域大小相对应 。若变量或常量可能在代码中多处使用,则应赋其以便于搜索的名称
避免使用编码
避免思维映射
选择是使用问题领域术语还是解决方案领域术语时。使用解决方案领域名称,只有程序员才会读你的代码。所以,尽管用那些计算机科学术语、算法名、模式名、数学术语吧。如果不能用程序员熟悉的术语来给手头的工作命名,就采用从所涉问题领域而来的名称吧。 传统上惯用单字母名称做循环计数器。然而,在多数其他情况下,单字母名称不是个好选择;读者必须在脑中将它映射为真实概念
类名,类名和对象名应该是名词或名词短语,如 Customer、WikiPage、Account 和 AddressParser。避免使用 Manager、Processor、Data 或 Info 这样的类名。类名不应当是动词
方法名。方法名应当是动词或动词短语,如 postPayment、deletePage 或 save。属性访问器、修改器
和断言应该根据其值命名,并依 Javabean 标准[18]加上 get、set 和 is 前缀。
不使用俚语
命名一以贯之、同个名称语义一致
添加有意义语境,不要添加没用的语境
总结:
每个系统都是使用某种领域特定语言搭建,而这种语言是程序员设计来描述那个系统的。函
数是语言的动词,类是名词。这并非是退回到那种认为需求文档中的名词和动词就是系统中类和
函数的最初设想的可怕的旧观念。其实这是个历史更久的真理。编程艺术是且一直就是语言设计
的艺术。
**大师级程序员把系统当作故事来讲,而不是当作程序来写。**他们使用选定编程语言提供的工
具构建一种更为丰富且更具表达力的语言,用来讲那个故事。那种领域特定语言的一个部分,就
是描述在系统中发生的各种行为的函数层级。在一种狡猾的递归操作中,这些行为使用它们定义
的与领域紧密相关的语言讲述自己那个小故事