第4章:注重实效的偏执

每个人都知道只有自己是好司机,其他人都不会好好开车。
——因此,你需要在麻烦发生之前小心谨慎、预判意外之事、从不让自己陷入无法解救自己的境地。

而一个“注重实效的”程序员会更进一步——他们连自己也不信任。因为他们知道没人能编写完美的代码,自己也不例外。

因此,需要对错误进行防卫性编码。
本章的内容即是各种防卫策略:

21《按合约设计》

合约既规定你的权利与责任,也规定对方的权利与责任。此外,还有关于一方未遵守的后果的约定。

我们也可以采用同样的理念来帮助软件模块进行交互。

DBC(Design By Contracts),通过合约进行设计
Meyer这样描述:

  • 前条件。为了调用例程,必须为真的条件。
  • 后条件。例程保证会做的事,例程完成时世界的状态。
  • 类不变项:类确保从调用者的视角来看,该条件总是为真。

“继承”和“多态”是面向对象的基石,也是DBC闪耀的领域。
比如 Liskov替换原则
子类必须能通过基类的接口使用,而使用者无需知道其区别

实现DBC:

  • 断言
  • 语言支持
  • 就算没有机制,也可以添加注释

可以使用DBC来早崩溃。在问题现场找到和诊断问题更容易。

不变项的其他用法?

  • 循环不变项?
  • 语义不变项?

动态合约与代理?

22《死程序不说谎》(提早崩溃)

如果有错误,那么提早崩溃

要崩溃,不要破坏。

虽然,有时简单地退出运行中的程序并不合适。
但是,要尽快终止它,死程序带来的危害通常小于有疾患的程序。

23《断言式编程》

无论何时你发现自己在思考“但那当然不可能发生”时——增加代码检查它,最容易的是使用断言。

注意:

  • 断言不应该有副作用
  • 断言可能会被关闭,所以不要把必须执行的代码放进去。
  • 不要用断言去替代真正的错误处理,因为断言检查的是决不应该发生的事

尽量保持断言开着:

  • BUG有可能没有找干净
  • 有一些突发情况(耗尽内存,塞满硬盘等)

24《何时使用异常》

检查每一个错误可能会导致代码很丑陋。
如果你用的语言支持异常,则可以用更简洁的方式表示。

什么是异常情况?
——问问你自己:“如果我移走所有的异常处理器,这些代码是否仍旧能运行?”
如果答案是“否”,那么异常也许就被用在了非异常的情形中。

25《怎样配平资源》(资源分配善始善终)

分配资源的例程也应该释放它。

对于一次不止需要一个资源的例程,两个建议:

  • 以与资源分配的次序相反的次序解除资源的分配。
  • 在代码不同地方分配同一组资源时,总以相同的次序分配它们。这降低死锁发生的可能性。

资源的配平可以与构造函数与析构函数结合。

配平与异常:
当异常时,需要释放资源,但是有可能违反DRY原则。
处理方法有多种,根据语言有所不同。

动态的数据结构往往有无法配平资源的情况。
比如有层级结构。三个主要选择:

  1. 顶层结构还负责释放它包含的子结构。这些结构随即递归地删除包含的数据等等
  2. 只解除顶层结构。它指向地(没在别处引用的)任何结构都会被丢弃。
  3. 如果顶层结构包含子结构,就拒绝解除自身的分配。

你可能需要个检查资源配平的工具

《程序员修炼之道》读书笔记(4):注重实效的偏执(防卫策略)相关推荐

  1. 《程序员修炼之道》笔记(一)

    这几天开始看<程序员修炼之道>,也许不少人看了书的标题,第一时间会觉得这是鸡汤一类的书.但至少以我自己的感受来看,这是很棒的书,现代人文主义不是提倡自我意识嘛,自己感觉好的就是好的.况且人 ...

  2. [转载+电子书下载]《程序员修炼之道》 笔记与感想

    [转载]<程序员修炼之道 >笔记与感想 1 我的源码让猫给吃了 不要寻找借口,从自身找原因 2 软件的熵  一句话:不以善小而不为,勿以恶小而为之. 从初期就要做好规范,不要因为是poc这 ...

  3. 程序员修炼之道---读书随笔1

    终于开始读<程序员修炼之道>这本书了,初看这本书的名字,有点以前的道士修炼法术的意思,觉得很是好奇,作为一名程序员,该如何修炼我们自己呢? 这本书涵盖的主题从个人责任.职业发展,直到用于使 ...

  4. 程序员修炼之道阅读笔记02

    本周阅读了程序员修炼之道(从小工到专家)的第四章<注重实效的偏执>.第五章<弯曲,或折断>.第六章<当你编码时>的相关内容,对其中一些值得我们学习的地方进行了摘录. ...

  5. 程序员修炼之道阅读笔记01

    读过这本书之后,我觉得这本书主要是在讲一个优秀的程序员应该具有的特点,素质和应该怎么去做.真正是一个程序员从小工到专家的修炼之路. 对于第一章"注重实效的哲学"有如下总结和理解 1 ...

  6. 《程序员修炼之道》笔记(九)

    *续 第八章 注重实效的项目 1. 无处不在的自动化 文明通过增加我们不假思索就能完成的重要操作的数目而取得进步. 无论是构建和发布流程.是书面的代码复查工作.还是其他任何在项目中反复出现的任务,都必 ...

  7. 《程序员修炼之道》笔记(八)

    第八章 注重实效的项目 随着你的项目开动,我们需要从个体的哲学和编码问题转向讨论更大的.项目级的问题.我们将不深入项目管理的具体细节,而是要讨论能使项目成功或失败的几个关键区域. 1. 注重实效的团队 ...

  8. 《程序员修炼之道》笔记(二)

    第二章 注重实效的途径 1. 重复的危害 a) DRY-Don't Repeat Yourself.系统中的每一项知识都必须具有单一.无歧义.权威的表示. b) 重复是怎样发生的 Imposed Du ...

  9. 《程序员修炼之道》笔记(四)

    第五章 弯曲,或折断 为了赶上今天近乎疯狂的变化步伐,我们需要尽一切努力编写尽可能宽松灵活的代码.否则,我们可能就会发现我们的代码很快就会变得过时,或是太脆弱,以至于难以清理. 1. 解耦与得墨忒耳法 ...

  10. 程序员修炼之道--读书简记

    前言 1,关注你的技艺 2,思考!思考你的工作 3,这是一个持续的过程 第一章 务实的哲学 1,人生是你的,你有选择权 人生是你自己的,是你在拥有.经营和创造 2,软件的熵:破窗理论 在城市中心,有些 ...

最新文章

  1. 梦美生命获1亿元A轮融资,鼎晖领投
  2. SpringBoot-400-Bad-Request(Request-header-is-too-large)
  3. java中import用法
  4. Swift2.0语言教程之类的方法
  5. 桌面整理工具不显示文件夹_「工具神器」你的桌面该整理了。
  6. new Grammar in 740 - internal table filter
  7. 交叉验证和超参数调整:如何优化您的机器学习模型
  8. 用python做数据分析pdf_利用python进行数据分析pdf
  9. C语言程序控制语句——while
  10. tf.train.Saver
  11. vs code ipynb文件_UE4引擎 源码的获取、安装,以及VS配置
  12. 菜鸟python_手把手教你,菜鸟也能用Python写一个2048游戏
  13. 【ElasticSearch】Es 源码之 GatewayModule GatewayService 源码解读
  14. 《C++ Primer Plus》读书笔记之十—类和动态内存分配
  15. Pytorch训练SSD网络时遇到的问题
  16. 微信浮窗是不是服务器保存,微信浮窗,能解决小程序留存难题吗?
  17. UPNP端口映射简单流程
  18. 在c语言中 实参与其对应的形参各占独立的存储单元,以下正确的说法是( )。在C语言中: A.实参和与其对应的形参各占用独立的存储单元...
  19. 二极管ss14测量_开关二极管怎么测量好坏
  20. 画色彩如何画出体积感

热门文章

  1. 我国的5年计划与软件项目计划-滚动计划
  2. 边境的悍匪—机器学习实战:第九章 无监督学习任务
  3. python自然语言_Python自然语言处理 - 随笔分类 - 牛皮糖NewPtone - 博客园
  4. android webview 电脑网页适应手机屏幕
  5. Flink的重启策略(RestartStrategy)实战
  6. java.lang.NoSuchMethodError错误
  7. python钻石和玻璃球游戏_python使用pygame实现笑脸乒乓球弹珠球游戏
  8. datagird无法deleteRow
  9. easyui datagrid deleteRow删除行时异常,删除了其他行
  10. 优雅草YYC松鼠短视频2022年12月28日更新v5.1.6版本更新·修复因为消息提醒二开导致菜单栏无法显示·进一步完善推送