读书笔记--<<会说话的代码>>
三天看完一本书,说出来我都不信,不过我还真是史无前例的做到了, 现在分享一下我的收获,希望大家拍砖,共同讨论一下.
<<会说话的代码>>一书是我们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的设计模式吧.
书中内容有很多,我只是选取了其中的一部分,作为我的读书笔记, 不算是"书透"吧,希望王老师不要责怪.
以后争取每读完一本书,都写一篇读书笔记,对自己的帮助真的很大.也希望大家看了,能够有所收获.
读书笔记--<<会说话的代码>>的更多相关文章
- csapp读书笔记-并发编程
这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...
- CSAPP 读书笔记 - 2.31练习题
根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1) 属于第一种情况 sum = x ...
- CSAPP读书笔记--第八章 异常控制流
第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...
- CSAPP 并发编程读书笔记
CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 《C#本质论》读书笔记(18)多线程处理
.NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
- Web高级征程:《大型网站技术架构》读书笔记系列
一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...
随机推荐
- 理解java设计模式之观察者模式
在生活实际中,我们经常会遇到关注一个事物数据变化的情况,例如生活中的温度记录仪,当温度变化时,我们观察它温度变化的曲线,温度记录日志等.对于这一类问题,很接近java设计模式里面的“观察者模式”,它适 ...
- 从头开始——重装ubuntu
一.装系统 环境:计算机原本装的系统是windows7+ubuntu 14.04,后来ubuntu的启动项被我手贱破坏了,进不了ubuntu,只能重新安装. 启动盘:使用UltraISO软碟通制作U ...
- Windows Live Writer针对CNBLOG的代码高亮插件
一,CodeHighlighter 1. 下载插件 下载地址:http://files.cnblogs.com/files/cmt/WindowsLiveWriter.CNBlogs.CodeHigh ...
- Java中的5种同步辅助类
当你使用synchronized关键字的时候,是通过互斥器来保障线程安全以及对共享资源的同步访问.线程间也经常需要更进一步的协调执行,来完成复杂的并发任务,比如wait/notify模式就是一种在多线 ...
- VS2013报表设计常用表达式
一.页眉 1."日期"表达式:="日期: "& Today.ToShortDateString() 效果: 2.格式化日期:="日期: &qu ...
- HAProxy+Keepalived+PXC负载均衡和高可用的PXC环境
HAProxy介绍 反向代理服务器,支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服 ...
- AngularJS之Factory vs Service vs Provider
原文 http://www.linuxeden.com/html/news/20140509/151538.html 当你初试 Angular 时,很自然地就会往 controller 和 scop ...
- 常用网站开发类Firefox扩展插件 (转)
作为一个 Web 开发人员,你几乎没有理由不喜欢Firefox,因为在Firefox下有很多专门针对开发的扩展插件,非常好用,这里就介绍一些常用的针对网站开发的FireFox扩展,供Web开发人员参考 ...
- Web服务器和动态语言如何交互--CGI&FastCGI&FPM浅谈
一个用户的Request是如何经过Web服务器(Apache,Nginx,IIS,Light)与后端的动态语言(如PHP等)进行交互并将结果返回给用户的呢? 本文浅谈个人观点,可能有误,欢迎拍砖,共同 ...
- python交换两个变量的值,一句代码搞定
a = 10 b = 20 # 不需要中间变量,一步搞定 a, b = b, a