《程序员修炼之道》读书笔记(4):注重实效的偏执(防卫策略)
第4章:注重实效的偏执
每个人都知道只有自己是好司机,其他人都不会好好开车。
——因此,你需要在麻烦发生之前小心谨慎、预判意外之事、从不让自己陷入无法解救自己的境地。
而一个“注重实效的”程序员会更进一步——他们连自己也不信任。因为他们知道没人能编写完美的代码,自己也不例外。
因此,需要对错误进行防卫性编码。
本章的内容即是各种防卫策略:
21《按合约设计》
合约既规定你的权利与责任,也规定对方的权利与责任。此外,还有关于一方未遵守的后果的约定。
我们也可以采用同样的理念来帮助软件模块进行交互。
DBC(Design By Contracts),通过合约进行设计
Meyer这样描述:
- 前条件。为了调用例程,必须为真的条件。
- 后条件。例程保证会做的事,例程完成时世界的状态。
- 类不变项:类确保从调用者的视角来看,该条件总是为真。
“继承”和“多态”是面向对象的基石,也是DBC闪耀的领域。
比如 Liskov替换原则 :
子类必须能通过基类的接口使用,而使用者无需知道其区别
实现DBC:
- 断言
- 语言支持
- 就算没有机制,也可以添加注释
可以使用DBC来早崩溃。在问题现场找到和诊断问题更容易。
不变项的其他用法?
- 循环不变项?
- 语义不变项?
动态合约与代理?
22《死程序不说谎》(提早崩溃)
如果有错误,那么提早崩溃。
要崩溃,不要破坏。
虽然,有时简单地退出运行中的程序并不合适。
但是,要尽快终止它,死程序带来的危害通常小于有疾患的程序。
23《断言式编程》
无论何时你发现自己在思考“但那当然不可能发生”时——增加代码检查它,最容易的是使用断言。
注意:
- 断言不应该有副作用
- 断言可能会被关闭,所以不要把必须执行的代码放进去。
- 不要用断言去替代真正的错误处理,因为断言检查的是决不应该发生的事。
尽量保持断言开着:
- BUG有可能没有找干净
- 有一些突发情况(耗尽内存,塞满硬盘等)
24《何时使用异常》
检查每一个错误可能会导致代码很丑陋。
如果你用的语言支持异常,则可以用更简洁的方式表示。
什么是异常情况?
——问问你自己:“如果我移走所有的异常处理器,这些代码是否仍旧能运行?”
如果答案是“否”,那么异常也许就被用在了非异常的情形中。
25《怎样配平资源》(资源分配善始善终)
分配资源的例程也应该释放它。
对于一次不止需要一个资源的例程,两个建议:
- 以与资源分配的次序相反的次序解除资源的分配。
- 在代码不同地方分配同一组资源时,总以相同的次序分配它们。这降低死锁发生的可能性。
资源的配平可以与构造函数与析构函数结合。
配平与异常:
当异常时,需要释放资源,但是有可能违反DRY原则。
处理方法有多种,根据语言有所不同。
动态的数据结构往往有无法配平资源的情况。
比如有层级结构。三个主要选择:
- 顶层结构还负责释放它包含的子结构。这些结构随即递归地删除包含的数据等等
- 只解除顶层结构。它指向地(没在别处引用的)任何结构都会被丢弃。
- 如果顶层结构包含子结构,就拒绝解除自身的分配。
你可能需要个检查资源配平的工具
《程序员修炼之道》读书笔记(4):注重实效的偏执(防卫策略)相关推荐
- 《程序员修炼之道》笔记(一)
这几天开始看<程序员修炼之道>,也许不少人看了书的标题,第一时间会觉得这是鸡汤一类的书.但至少以我自己的感受来看,这是很棒的书,现代人文主义不是提倡自我意识嘛,自己感觉好的就是好的.况且人 ...
- [转载+电子书下载]《程序员修炼之道》 笔记与感想
[转载]<程序员修炼之道 >笔记与感想 1 我的源码让猫给吃了 不要寻找借口,从自身找原因 2 软件的熵 一句话:不以善小而不为,勿以恶小而为之. 从初期就要做好规范,不要因为是poc这 ...
- 程序员修炼之道---读书随笔1
终于开始读<程序员修炼之道>这本书了,初看这本书的名字,有点以前的道士修炼法术的意思,觉得很是好奇,作为一名程序员,该如何修炼我们自己呢? 这本书涵盖的主题从个人责任.职业发展,直到用于使 ...
- 程序员修炼之道阅读笔记02
本周阅读了程序员修炼之道(从小工到专家)的第四章<注重实效的偏执>.第五章<弯曲,或折断>.第六章<当你编码时>的相关内容,对其中一些值得我们学习的地方进行了摘录. ...
- 程序员修炼之道阅读笔记01
读过这本书之后,我觉得这本书主要是在讲一个优秀的程序员应该具有的特点,素质和应该怎么去做.真正是一个程序员从小工到专家的修炼之路. 对于第一章"注重实效的哲学"有如下总结和理解 1 ...
- 《程序员修炼之道》笔记(九)
*续 第八章 注重实效的项目 1. 无处不在的自动化 文明通过增加我们不假思索就能完成的重要操作的数目而取得进步. 无论是构建和发布流程.是书面的代码复查工作.还是其他任何在项目中反复出现的任务,都必 ...
- 《程序员修炼之道》笔记(八)
第八章 注重实效的项目 随着你的项目开动,我们需要从个体的哲学和编码问题转向讨论更大的.项目级的问题.我们将不深入项目管理的具体细节,而是要讨论能使项目成功或失败的几个关键区域. 1. 注重实效的团队 ...
- 《程序员修炼之道》笔记(二)
第二章 注重实效的途径 1. 重复的危害 a) DRY-Don't Repeat Yourself.系统中的每一项知识都必须具有单一.无歧义.权威的表示. b) 重复是怎样发生的 Imposed Du ...
- 《程序员修炼之道》笔记(四)
第五章 弯曲,或折断 为了赶上今天近乎疯狂的变化步伐,我们需要尽一切努力编写尽可能宽松灵活的代码.否则,我们可能就会发现我们的代码很快就会变得过时,或是太脆弱,以至于难以清理. 1. 解耦与得墨忒耳法 ...
- 程序员修炼之道--读书简记
前言 1,关注你的技艺 2,思考!思考你的工作 3,这是一个持续的过程 第一章 务实的哲学 1,人生是你的,你有选择权 人生是你自己的,是你在拥有.经营和创造 2,软件的熵:破窗理论 在城市中心,有些 ...
最新文章
- 梦美生命获1亿元A轮融资,鼎晖领投
- SpringBoot-400-Bad-Request(Request-header-is-too-large)
- java中import用法
- Swift2.0语言教程之类的方法
- 桌面整理工具不显示文件夹_「工具神器」你的桌面该整理了。
- new Grammar in 740 - internal table filter
- 交叉验证和超参数调整:如何优化您的机器学习模型
- 用python做数据分析pdf_利用python进行数据分析pdf
- C语言程序控制语句——while
- tf.train.Saver
- vs code ipynb文件_UE4引擎 源码的获取、安装,以及VS配置
- 菜鸟python_手把手教你,菜鸟也能用Python写一个2048游戏
- 【ElasticSearch】Es 源码之 GatewayModule GatewayService 源码解读
- 《C++ Primer Plus》读书笔记之十—类和动态内存分配
- Pytorch训练SSD网络时遇到的问题
- 微信浮窗是不是服务器保存,微信浮窗,能解决小程序留存难题吗?
- UPNP端口映射简单流程
- 在c语言中 实参与其对应的形参各占独立的存储单元,以下正确的说法是( )。在C语言中: A.实参和与其对应的形参各占用独立的存储单元...
- 二极管ss14测量_开关二极管怎么测量好坏
- 画色彩如何画出体积感
热门文章
- 我国的5年计划与软件项目计划-滚动计划
- 边境的悍匪—机器学习实战:第九章 无监督学习任务
- python自然语言_Python自然语言处理 - 随笔分类 - 牛皮糖NewPtone - 博客园
- android webview 电脑网页适应手机屏幕
- Flink的重启策略(RestartStrategy)实战
- java.lang.NoSuchMethodError错误
- python钻石和玻璃球游戏_python使用pygame实现笑脸乒乓球弹珠球游戏
- datagird无法deleteRow
- easyui datagrid deleteRow删除行时异常,删除了其他行
- 优雅草YYC松鼠短视频2022年12月28日更新v5.1.6版本更新·修复因为消息提醒二开导致菜单栏无法显示·进一步完善推送