前面说过了函数要专注于做一件事,函数要么做什么事,要么回答什么事,二者不可兼得。


拆分执行与询问
举个栗子
public boolean set(String attribute, String value);
这个函数设置某个指定的属性,如果成功返回true,不存在返回false。这样就有了如下的代码
if(set(“username”, “unclebob”))…
对于作者来说,写出这些代码,自己当然是很清楚的,但是对于读者来说,这个就有两种可能的意思了,第一就是问username属性值是否之前已设置为unclebob,另一种就是在问username属性值是否成功设置为unclebob。
但是如果改为如下,意思就很明白了
if(attributeExists(“username”)){
setAttribute(“username”, “unclebob”);
}


使用异常替代返回错误码
还是两个例子对比

if (deletePage(page) == E_OK) {if (registry.deleteReference(page.name) == E_OK) { if (configKeys.deleteKey(page.name.makeKey()) == E_OK){logger.log("page deleted");} else {logger.log("configKey not deleted");}} else { logger.log("deleteReference from registry failed");}
} else { logger.log("delete failed");return E_ERROR;
}

若用异常替代返回错误码,错误处理代码就能从主路径代码中分离出来得到简化

try {deletePage(page);registry.deleteReference(page.name);configKeys.deleteKey(page.name.makeKey());
} catch (Exception e) { logger.log(e.getMessage());
}

抽离try/Catch代码块
错误处理就是一件事。
错误处理和正常流程不要混为一谈,最好将try/catch代码块的主题抽离出来,另外形成函数。

public void delete(Page page) {try {deletePageAndAllReferences(page);} catch (Exception e) {logError(e);}
}private void deletePageAndAllReferences(Page page) throws Exception {deletePage(page);registry.deleteReference(page.name);configKeys.deleteKey(page.name.makeKey());
}private void logError(Exception e){logger.log(e.getMessage));
}

不要重复自己
将代码中重复的部分抽离出来,做成一个函数。

代码整洁之道读书笔记----第三章---函数--第三节-函数结构的优化相关推荐

  1. 代码整洁之道读书笔记——第一章:整洁代码

    软件质量,不仅仅依赖于项目架构和项目管理,同样重要的是代码质量!!! 序 神在细节之中,其实干什么事都一样,从小到大,一直明白一个道理:细节决定成败! 软件架构在开发中占据重要地位.其次,宏达建筑的最 ...

  2. 代码整洁之道-读书笔记1

    第一章 整洁代码 1.2糟糕的代码 糟糕的代码会毁掉一个公司,但是为什么会出现糟糕的代码? 可能是因为赶时间,如果花时间重构或者清理以前的代码,老板就会大发雷霆. 勒布朗法则:稍后等于用不. 1.3混 ...

  3. 代码整洁之道-读书笔记之整洁的代码

    1.整洁代码 阅读本书有两个原因,第一,你是个程序员,第二,你想成为更好的程序员 1.1 要有代码 有人认为随着时代的发展,写代码不再是问题,我们更应该关注建模和需求 这句话后半句没有问题,因为语言在 ...

  4. 代码整洁之道读书笔记(Ch4-Ch7)

    这几章从注释.程序格式.对象与数据结构的规范以及错误处理四个方面介绍了如何使代码变得简洁易懂.不同于上次摘抄的方法,这一次我会结合第一次个人作业的代码进行分析. 第四章  注释 这一章告诉我们,好的注 ...

  5. 代码整洁之道 读书笔记

    第1章 整洁代码 1.1 要有代码 1.2 糟糕的代码      稍后等于永不 1.3 混乱的代价 假设前期不注意.后期的加入代码.改动效率都很低 1.3.1 华丽新设计 1.3.2 态度 1.3.3 ...

  6. 代码整洁之道----读书笔记

    一.有意义的命名规则 二.优雅的函数 三.良好的注释 四.整齐的格式 转载于:https://www.cnblogs.com/k5bg/p/11063235.html

  7. 计算机系统导论第九章,计算机系统导论 -- 读书笔记 -- 第三章 程序的机器级表示 (持续更新)...

    计算机系统导论 -- 读书笔记 -- 第三章 程序的机器级表示 (持续更新) 第三章 程序的机器级表示 3.1 历史观点 3.2 程序编码 1. 命令行 (1)编译 Linux> gcc -Og ...

  8. 【苦练基本功】代码整洁之道 pt1(第1章-第3章)

    代码整洁之道 pt1(第1章-第3章) 1 整洁代码 1.1 要有代码 1.2 糟糕的代码 1.3 混乱的代价 1.3.1 什么是整洁代码? 2 有意义的命名 2.1 名副其实 2.2 避免误导 2. ...

  9. 【苦练基本功】代码整洁之道 pt3(第7章-第9章)

    代码整洁之道 pt3(第7章-第9章) 7 错误处理 7.1 使用异常而非返回码 7.2 先写try-catch-finally 7.3 使用未检异常 7.4 给出异常发生的环境说明 7.5 依调用者 ...

  10. Android群英传神兵利器读书笔记——第三章:Android Studio奇技淫巧

    Android群英传神兵利器读书笔记--第三章:Android Studio奇技淫巧 这篇文章篇幅较长,可以使用版权声明下面的目录,找到感兴趣的进行阅读 目录 3.1 Android Studio使用 ...

最新文章

  1. Ultimate SLAM:结合事件、图像和惯性测量单元,在HDR和高速场景下实现鲁棒的视觉SLAM...
  2. Handlebars的基本用法
  3. [architecture]-ARMV8的The current Program Counter (PC)介绍
  4. 天津大学计算机科学学院夏令营,天津大学计算机科学与技术学院(专业学位)计算机技术保研夏令营...
  5. electron增加导航按钮_Electron发布6.0 Released版本
  6. 简述对象和类的关系python_(一)Python入门-6面向对象编程:02类的定义-类和对象的关系-构造函数-实例属性-实例方法...
  7. Ubuntu18.04报错:system/tools/aidl/aidl_language_y.yy: error: define variable ‘api.pure‘ is not used
  8. yum源配置文件解释
  9. python日期转化利器arrow实践
  10. sql server 2008 镜像挂起
  11. 现在还有人玩暗黑2吗?
  12. 微加速度计的原理与应用
  13. impala日期格式转换
  14. 百度地图坐标转换及跨域
  15. 英语单词词性顺口溜_英语单词词性分类
  16. 共享计算机用户帐户限制怎么办,win7系统使用共享功能被提示用户账户限制的解决方法...
  17. php容器下安装gd库
  18. Android RecyclerView使用ItemDecoration刻画时间线/时间轴/时光轴timeline
  19. socket:read: Connection reset by peer
  20. CC2530F256RHAR 射频芯片 无线收发器芯片 ZigBee 解决方案

热门文章

  1. ADT(abstract data types)抽象数据类型
  2. 关于Backup Exec的Agent启动失败的解决办法
  3. OpenVz Centos4 Oracle 10g VE
  4. [猫扑贴贴论坛]2010暴强年终总结篇:有种美叫凤姐,有种帅哥叫犀利哥
  5. [回帖整理] 创业难
  6. 占空比输出程序c语言,怎样利用c语言来实现占空比的设置?(单片机:SPCE061A)
  7. java 远程调用方法_如何在Java中实现远程方法调用
  8. 车轮轨迹原理_倒车轮子原理是什么 倒车原理动画演示很有用
  9. vscode 智能打印_vscode学习(一)之vscode开发中绝对让你惊艳的插件!!!(个人在用) 持续更新。。。。...
  10. c++在数组中添加元素_LeetCode 题解 | 1157. 子数组中占绝大多数的元素