`
足至迹留
  • 浏览: 487692 次
  • 性别: Icon_minigender_1
  • 来自: OnePiece
社区版块
存档分类
最新评论

<1> 导读 && 函数(方法)篇

阅读更多
早就想看下《clean code》了,不知为啥总是没看,突然发现该看看了。其实很多原则或多或少都听说过实践过。再来看一下可能感觉更好吧。
窃以为这本书第一章算是整洁之道,后面算是整洁之术吧。

一、 代码整洁之道

代码永存,没有什么先进的代码工具能代替程序员。模糊的需求和精确的代码之间有个必须程序员才能弥补的鸿沟。

勒布朗法则:later equals never.  法则好简单,为什么做起来那么难呢??有的洁癖真的很吸引人。

花时间保持代码整洁不仅关系效率而且关系生存。破窗理论,破烂的代码是毁灭的第一步。

当老系统繁重的无法快速满足新变化时,重启新团队重新设计老系统,并与老系统并行运行的例子还是有一定的体会的,此事正好发生在我待过的项目。

写了不整洁的代码而因此承受惨重代价,这是程序员自作自受,跟繁琐的需求,无止的变化,难以接受的进度,sx的经理都有关系,但还是要说,自作自受。

写混乱的代码就是最快的方式? 不是,那是因为你根本写不出漂亮的代码。漂亮的代码才是最快的。你有洁癖吗?艺术家的艺术。

整洁的代码只做好一件事。尽可能的简单(如命令查询分离原则),尽可能的少依赖。
简单的代码,依其重要顺序:
1. 能通过所有测试
2. 没有重复代码
3. 体现系统中的全部设计理念
4. 包括尽量少的实体,比如类,方法等。

消除重复和提高表达力(命名)能在代码整洁方面获益良多。

不要重复代码,只做一件事,表达力,小规模抽象。概括了整洁代码的全部内容。

写新代码时我们一直在读旧代码。读写话费时间比例超过10:1。编写代码的难度,取决于读周边代码的难度。要想写的容易,先让代码易读吧。

美国童子军军规:让营地比你来时更干净。代码的每次check out, check in也是如此。

二、 代码整洁之术
2.1命名

1.名副其实,见名知意。
1) 名字不要怕长,表达清楚更关键。
2) 魔鬼数字用有意义的常量
3) If里的条件能用一个有明确含义的功能方法表达更好。

到处需要命名
如:原始代码,



重构后代码1:


再次重构后2:


2.做有意义的区分

比如有两个类,ProductInfo, ProductData,名称虽然不同,但意义却无区别,就像a, an, the一样。这种情况在项目中也时常发生,至少我经历过。。。

3.使用读得出来的名称
使用正确的准确的英文表达。花些时间在命名上是非常值得的。不然,痛苦在后面...
单字母名称(如i,j)只应出现在短方法的本地变量。名称长度应与其作用域大小想对应。
若变量或常量多次出现在代码中,应赋予其便于搜索的名称。比如,
原始代码:



重构后后:



4.类名

类名和对象名都应该是名词或名词短语,如Customer, Account,AddressParser。类名不应该是动词。

5.方法名

方法名应该是动词或动词短语,如postPayment, save等。

6.每个概念对应同一个词,一致的风格

每个类中采用一致的命名风格,如get***,set***,一词一意,以免概念模糊。可以采用通用的专业性的计算机术语,或问题领域的名称

7.添加有意义的语境

比如添加前缀,lastName, firstName在表示的是地址的时候就可以用addrLastName,addrFirstName.但也不要添加无意义的前缀。

命名一定要精确。

2.2 函数
1.函数的第一规则是短小,第二规则是还要更短小。

If,else,while等代码块中的代码应该只有一行,大抵应该是一个函数调用,一个有较具说明性的名称的函数调用。当然有些极端,理念就是不做多余的事,做同一个抽象层次的事。

2.只做一件事,做好一件事
做的事跟函数名称对应。一个函数做的事情越少,功能越集中,越好命名。

3.每个函数一个抽象层级
函数中的每个语句,包括函数调用等应该是同一个抽象层次的。

4.函数的参数
最理想的参数个数是零,其次是一,再次是二,应该避免三个。有些公司规范是不要超过5个。当参数个数要超过2个或3个时,就要看这些参数是否需要封装成类了。
尽量使用返回值,不要使用输出参数。

5.标识参数(boolean参数)




6.使用异常代替错误返回码
我们要command-query分离,但有时候command会需要返回操作的结果,这时候可以用异常表示错误,否则表示正确,不需要再返回结果状态。

7.分隔指令和查询(command-query分离)

8.抽离try/catch块
Try/catch块搞乱了代码结构,可以把处理异常的逻辑抽离成一个函数,错误处理就是一件独立的事。

9.do not repeat yourself
重复可能是软件中一切邪恶的根源。


整洁的代码并不是一开始就能写出来,就像文章的初稿一样可能混乱不堪,但经过反复重构慢慢就形成了整洁的代码。这个重构不能隔太久,重构在平时。同时保证测试通过。重构和测试总是分不开的。
  • 大小: 19.9 KB
  • 大小: 61.1 KB
  • 大小: 60 KB
  • 大小: 28.1 KB
  • 大小: 7.1 KB
  • 大小: 68.3 KB
1
1
分享到:
评论
1 楼 穿山丁 2013-09-03  
关注楼主很久了,楼主思路清晰,读了之后收获很大,一起进步!

相关推荐

    Excel 2013函数与公式应用大全

    全书共分为4篇共31章,内容包括函数导读、常用函数、函数综合应用、其他功能中的函数应用。附录中还提供了Excel 2013规范与限制、Excel 2013常用快捷键、Excel函数及功能等内容,方便读者查阅。 本书适合各层次的...

    Linux网络代码导读.pdf

    这篇文章的目的就是勾勒出一个框架,让读者能够大致能够了解TCP/IP 究竟是怎么工作的。以前见到的许多代码分析都是基于2.0 内核的,在新的内核 中许多函数变了名字,这尤其给初学者带来了困难,本文是以2.4.0-test9 ...

    深入浅出MFC-简体版(2)PDF

    第0章 你一定要知道(导读) 这本书适合谁 你需要什么技术基础 你需要什么软硬件环境 让我们使用同一种语言 本书符号习惯 本书例程的取得 范例程序说明 与前版本之差异 如何联络作者 第一篇 勿在浮砂筑高台 第1章 ...

    深入浅出MFC【侯捷】

    目录 第0章 你一定要知道(导读) 这本书适合谁 你需要什么技术基础 你需要什么软硬件环境 让我们使用同一种语言 本书符号习惯 本书例程的取得 范例程序说明 与前版本之差异 如何联络作者 第一篇 勿在浮砂筑高台 第1...

    深入浅出MFC 2e

    第0章 你一定要知道(导读) 这本书适合谁 你需要什么技术基础 你需要什么软硬件环境 让我们使用同一种语言 本书符号习惯 本书例程的取得 范例程序说明 与前版本之差异 如何联络作者 第一篇 勿在浮砂筑高台 第1章 ...

    侯捷- -深入浅出MFC

    第0章 你一定要知道(导读) 这本书适合谁 你需要什么技术基础 你需要什么软硬件环境 让我们使用同一种语言 本书符号习惯 本书例程的取得 范例程序说明 与前版本之差异 如何联络作者 第一篇 勿在浮砂筑高台 第1章 ...

    深入浅出MFC

     第0章 你一定要知道(导读)  这本书适合谁  你需要什么技术基础  你需要什么软硬件环境  让我们使用同一种语言  本书符号习惯  本书例程的取得  范例程序说明  与前版本之差异  如何联络作者  第一篇 ...

    InterviewQuestions:吾日三省吾身

    导读 推荐阅读顺序: HTML 篇 CSS 篇 Javascript 篇 函数执行结果(考察知识点掌握) 源码相关 网络相关 设计模式 算法相关 Nodejs 篇 未解答问题(无答案) 大厂面试题 HTML 篇 CSS 篇 简述 Rem 及其转换原理 ...

    深入BREW开发 学习文档

    导读 3 第一篇 勿在浮沙筑高塔 5 第一章 硬件基础 6 1.1 CPU和RAM 6 1.2 ROM存储芯片 7 1.3 输出设备 10 1.4 输入设备 10 1.5 小结 11 第二章 软件基础 12 2.1 重温C语言的指针 13 2.2 重温C语言的结构 18 2.3 重温...

    提升python处理速度原理及方法实例

    这篇文章主要介绍了提升python处理速度原理及方法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下  导读:作为日常生产开发中非常实用的一门语言,python...

    vuex-analysis:学习原始码整体架构系列8篇之vuex原始码,前端面试异步原始码,微信搜寻「若川视野」关注我,长期交流学习〜

    学习vuex原始码整体架构,打造属于自己的状态管理库 前言 你好,我是。这是学习源码整体架构二进制整体学习...导读文章比较详细的介绍了vuex , vue源码调试方法和Vuex原理。并且详细介绍了Vuex.use安装和new Vuex.S

    带你走进MySQL数据库(MySQL入门详细总结一)

    导读:关于MySQL用三篇文章带你进入MySQL的世界。 文章目录1.MySQL2.MySQL的使用3.MySQL概述4.导入数据5.sql语句1.查询2.排序(升序,降序)3.分组函数4.group by和having 1.MySQL MySQL开源免费,MySQL 是一个关系...

    Contiki的内核分析-事件驱动(一)

    导读: 本文通过分析Contiki的源码,梳理Contiki的process-event模型中的event机制。 通过前文的阐述我们知道,Contiki是基于事件驱动的,有process-event模型和5大定时器机制。本文开始梳理process-event模型中的...

    axios-analysis:学习原始码整体架构系列8篇之axios原始码,前端面试正交原始码,微信搜寻「若川视野」关注我,长期交流学习〜

    学习axios原始码整体架构,打造属于自己的请求库1.前言你好,我是。这是学习源码整体架构系列二进制整体学习源码整体架构系列第六篇。整体架构这句话好像有点大,姑且就算是二进制整体结构吧,主要就是学习是代码...

    关于mysql自增id,你需要知道的

    导读:在使用MySQL建表时,我们通常会创建一个自增字段(AUTO_INCREMENT),并以此字段作为主键。本篇文章将以问答的形式讲述关于自增id的一切。 注: 本文所讲的都是基于Innodb存储引擎。 1.MySQL为什么建议将自增列...

    ACTCMS网站管理系统 4.0 gbk 20110623.rar

    8、强大的文章显示功能,文章除了分页、页数统计这些,还拥有上一篇、下一篇提示、点击数、评论留言、查看权限(收费文章)、投稿系统等强大的功能 9、独创的Tags标签,该功能随着系统使用时间的增加,一个真正属于您...

    ACTCMS网站管理系统 4.0 utf-8 20110623.rar

    8、强大的文章显示功能,文章除了分页、页数统计这些,还拥有上一篇、下一篇提示、点击数、评论留言、查看权限(收费文章)、投稿系统等强大的功能 9、独创的Tags标签,该功能随着系统使用时间的增加,一个真正属于您...

    ACT文章管理系统

    8、强大的文章显示功能,文章除了分页、页数统计这些,还拥有上一篇、下一篇提示、点击数、评论留言、查看权限(收费文章)、投稿系统等强大的功能 9、独创的Tags标签,该功能随着系统使用时间的增加,一个真正属于您...

    ACTCMS网站管理系统 v4.0 build 20110623 UTF8 正式版.rar

    8、强大的文章显示功能,文章除了分页、页数统计这些,还拥有上一篇、下一篇提示、点击数、评论留言、查看权限(收费文章)、投稿系统等强大的功能 9、独创的Tags标签,该功能随着系统使用时间的增加,一个真正属于您...

    ACTCMS网站管理系统 v4.0 build 20110623 GBK 正式版.rar

    8、强大的文章显示功能,文章除了分页、页数统计这些,还拥有上一篇、下一篇提示、点击数、评论留言、查看权限(收费文章)、投稿系统等强大的功能 9、独创的Tags标签,该功能随着系统使用时间的增加,一个真正属于您...

Global site tag (gtag.js) - Google Analytics