三天看完一本书,说出来我都不信,不过我还真是史无前例的做到了, 现在分享一下我的收获,希望大家拍砖,共同讨论一下.

  <<会说话的代码>>一书是我们BJDP小组里的王洪亮老师的一本著作,第一次听王老师分享时,就被王老师的技术折服了,如果大家在北京,有兴趣的话可以参与我们这个"北京设计模式学习小组(BJDP)"(免费参与哦), 相信每一个人都会有所收获 .

  还是说回书,这本书主要阐述了怎么样让我们写的代码具有自我的表达能力,让每一个程序员都能看懂,而且易扩展和维护.主要从以下几个方面着手:命名,注释,风格与结构,架构.(以下内容是我从书总结出来,再加上自己的理解,如有不对,与作者无关哦)

  1. 命名:

    1)最好全要英文,不要加入地方特色(拼音,法语之类),

    2)最好不要使用缩写,相似单词太多了,对con-有太多的猜测,(除那些约定俗成的)

    3)最好不要超过16个字符,太长不容易看懂,而且命名太长可能是设计上有问题.

    4)见名知义,无意义的名字最好不要起:temp,a,para1,list (循环变量除外).

    5)包或项目的名称:组织/公司+项目+功能/模块,如.Microsoft.Windows.Common.Controls这样能避免与第三方模块集成出现重名的情况.

    6)接口不要以I开头,有时一开始定义的接口,改着改着就成了抽象类了,此外要说推荐,就推荐使用-able结尾表能力,如Cloneable,Runnable.

    7)基类要选用具有通用意义的名词:Model,View,Control.有些抽象类可以加前缀Abstract+

    8)方法命名:动词(+名词).这里名词根据实际情况可有可无,如果有的话,根据返回值的情况确定是否用复数形式.

    9)考虑使用时样子如类名LeapYear,方法名isLeapYear,初看都不错,但使用时就发现LeapYear.isLeapYear()不如LeapYear.isLeap()更好.

    10)常量都大写,单词多的话之间采用下划线,常量多的话可以通过开头词进行分组.

    11)多使用对应词语:

min      max    positive negative  start stop    begin end  source destination  from to previous current next  create destory  plus minus
connect  close(disconnect)  upload download add remove add sub enable disable pause resume open close initialize finalize   request response
success fail bottom top include exclude input output import export width height up  down valid invalid push pop
get set first last befor after            
                 

  

  2. 注释

    1)如果有版本管理工具,那么就不要修改记录的注释了.

    2)如果你还不知道todo那就要查一下啦

    3)JavaDoc不是万能的,对那些需要指明的地方,还需要我们特别注释.

    4)异常处理中 如果catch不做任何处理,那就需要写注释.

  

  3. 风格与结构

    1)看看自己写的代码是否整齐,IDE可以帮助我们缩进对对齐,以表现出更好的代码层次关系.

    2)长方法,我个人理解超出一屏就太长了,IDE的Rafactor就派上用场了:提取方法,或者看一下是不是这个方法做了不该它做的事.

    3)某行太长,每次只能拖到滚轮才能看全的行,是不是太长了呢,

    4)去掉false 和true:if(candidate.visible==false)与if(!candidate.visible)哪个更好一些呢.

    5)长参数列表,有的书说参数个数可以是7+-2,本人作者建议参数小于3,最好一个都不要.我觉得如果架构设计的好的话,可以实现(有难度啊),起码是个方向.具体方法是:引入参数对象或提取字段.

    6)长分支:if else或swich Case.解决办法有:合并同类项(减少代码),状态/策略模式(会生成多个类,可以通过配置文件进和步简化),

    7)魔法数字与魔法字符串:硬编码在代码的数字或字符,不仅不易修改,而且还看不懂它是什么意思.用配置文件试一试.

    8)去掉return前的判断:比较以下三段代码:你会发现....

 //first para
public boolean hasMore(){
boolean flag=false;
if(list.size()>){
flag=true;
}
return flag;
} //second para
public boolean hasMore(){
if(list.size()>){
return ture;
}
return false
} //third para
public boolean hasMore(){
return list.size()>
}

    9)嵌套过深圈复杂度越高,越容易引起Bug,主要的方法有:提取方法(虽然实际上没有减少层数,不过会改后续重构提供方便),提前判定,用while代替for

具体实例,请看书中的实例.

    10)Don't Repeat Yourself:老生常谈的问题了.解法有:同一类内的提取方法,子类间的抽取方法到父类,相互之间没关系类可以把共有方法移植到工具类.

    11)采用正则表达式进行内容或格式校验.替代那些if  else if .....

    12)使用Lambda表达式简化代码.

  4.架构

    1)通过使用OOA与OOD来设计系统.

    2)尽量满足SOLID设计原则.

    3)想要实现以上两点:去啃本GOF的设计模式吧.

    

  书中内容有很多,我只是选取了其中的一部分,作为我的读书笔记, 不算是"书透"吧,希望王老师不要责怪.

  以后争取每读完一本书,都写一篇读书笔记,对自己的帮助真的很大.也希望大家看了,能够有所收获.

读书笔记--<<会说话的代码>>的更多相关文章

  1. csapp读书笔记-并发编程

    这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...

  2. CSAPP 读书笔记 - 2.31练习题

    根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1)  属于第一种情况 sum = x ...

  3. CSAPP读书笔记--第八章 异常控制流

    第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...

  4. CSAPP 并发编程读书笔记

    CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...

  5. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  6. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  7. 《C#本质论》读书笔记(18)多线程处理

    .NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...

  8. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

  9. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  10. Web高级征程:《大型网站技术架构》读书笔记系列

    一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...

随机推荐

  1. 理解java设计模式之观察者模式

    在生活实际中,我们经常会遇到关注一个事物数据变化的情况,例如生活中的温度记录仪,当温度变化时,我们观察它温度变化的曲线,温度记录日志等.对于这一类问题,很接近java设计模式里面的“观察者模式”,它适 ...

  2. 从头开始——重装ubuntu

    一.装系统 环境:计算机原本装的系统是windows7+ubuntu 14.04,后来ubuntu的启动项被我手贱破坏了,进不了ubuntu,只能重新安装. 启动盘:使用UltraISO软碟通制作U ...

  3. Windows Live Writer针对CNBLOG的代码高亮插件

    一,CodeHighlighter 1. 下载插件 下载地址:http://files.cnblogs.com/files/cmt/WindowsLiveWriter.CNBlogs.CodeHigh ...

  4. Java中的5种同步辅助类

    当你使用synchronized关键字的时候,是通过互斥器来保障线程安全以及对共享资源的同步访问.线程间也经常需要更进一步的协调执行,来完成复杂的并发任务,比如wait/notify模式就是一种在多线 ...

  5. VS2013报表设计常用表达式

    一.页眉 1."日期"表达式:="日期: "& Today.ToShortDateString() 效果: 2.格式化日期:="日期: &qu ...

  6. HAProxy+Keepalived+PXC负载均衡和高可用的PXC环境

    HAProxy介绍 反向代理服务器,支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服 ...

  7. AngularJS之Factory vs Service vs Provider

    原文  http://www.linuxeden.com/html/news/20140509/151538.html 当你初试 Angular 时,很自然地就会往 controller 和 scop ...

  8. 常用网站开发类Firefox扩展插件 (转)

    作为一个 Web 开发人员,你几乎没有理由不喜欢Firefox,因为在Firefox下有很多专门针对开发的扩展插件,非常好用,这里就介绍一些常用的针对网站开发的FireFox扩展,供Web开发人员参考 ...

  9. Web服务器和动态语言如何交互--CGI&FastCGI&FPM浅谈

    一个用户的Request是如何经过Web服务器(Apache,Nginx,IIS,Light)与后端的动态语言(如PHP等)进行交互并将结果返回给用户的呢? 本文浅谈个人观点,可能有误,欢迎拍砖,共同 ...

  10. python交换两个变量的值,一句代码搞定

    a = 10 b = 20 # 不需要中间变量,一步搞定 a, b = b, a