读书笔记--<<会说话的代码>>
三天看完一本书,说出来我都不信,不过我还真是史无前例的做到了, 现在分享一下我的收获,希望大家拍砖,共同讨论一下.
<<会说话的代码>>一书是我们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高级征程:《大型网站技术架构》读书笔记系列
一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...
随机推荐
- SqlBulkCopy使用介绍以及注意事项
SqlBulkCopy,微软提供的快速插入类,针对大批量数据操作,此类效果明显有所提升,以下是微软官方解释: Microsoft SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具 ...
- IE 中创建 子窗口 传值 与接收值 【window.showModalDialog】
父窗口 创建一个窗口 var backinfo = window.showModalDialog('UserSelect.aspx', '', 'dialogHeight=600px; dialogW ...
- Respond.js让IE6-8支持CSS3 Media Query
原文地址:http://caibaojian.com/respondjs.html 使用方式 官方demo地址:http://scottjehl.github.com/Respond/test ...
- Sql server中根据object的定义查找object
SELECT OBJECT_NAME(object_id) FROM sys.sql_modulesWHERE definition LIKE '%keyword to search%' 或者 SEL ...
- java菜鸟篇<二> eclipse启动tomcat报错的问题:Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main"
9.1今天不知道自己瞎搞eclipse的时候按到了什么键,然后再启动程序的时候就会报错: 如下: Exception: java.lang.OutOfMemoryError thrown from t ...
- VS2010 配置 DirectX 开发环境
1.首先下载 DXSDK 并安装 http://download.microsoft.com/download/A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458E31/D ...
- volatile 和const 变量的使用
一.volatile定义: 一个定义为volatile的变量是说这变量可能会被意想不到的被改变,这样,有了volatile变量后,就提醒编译器就不会去假设这个变量的值了.精确地说就是,编译中的优化器在 ...
- css 兼容小三角
<!DOCTYPE><html ><head><meta http-equiv="Content-Type" content=" ...
- PHP实现简单爬虫
<?php /** * 爬虫程序 -- 原型 * * 从给定的url获取html内容 * * @param string $url * @return string */ func ...
- Zend Framework 框架搭建
通过手工方法搭建Zend Framework的MVC框架结构.首先看一下zend framework mvc的目录结构 1. 在根目录下面创建 public ,并在 public 下创建 index. ...