编程匠艺php,我的思想杂烩《编程匠艺》读书笔记

防御性编程是一种确保代码在面对错误输入和意外情况时仍能正确运行的方法。它包括检查输入的有效性,使用安全数据结构,处理所有返回值,避免假设,以及使用如前置条件、后置条件和断言等约束来验证设想。虽然这可能会增加开发成本,但能显著减少调试时间和避免安全问题。优秀的程序员会积极采用防御性编程策略,而忽视此方法可能导致代码的脆弱性和不可预测行为。
摘要由CSDN通过智能技术生成

使程序正确和使程序能用的区别:1. 编写在大多数情况下都能用的代码是很容易的,它对常规的输入集会产生常规的输出集;2. 正确的代码绝对不会崩溃,对于所有的输入集,它的输出都将是正确的;3. 并非所有正确的代码都是优秀的代码,因为有些正确的代码的逻辑可能很难理解,难以维护。

在编写代码的时候,你会很容易产生很多设想,例如程序应该如何运行、如何调用、如何输入等。我们经常有以下3种常见的设想:1. 这个函数“绝对不会”被那样调用,传递给我的参数总是有效的;2. 这段代码肯定会“一直”正常运行,它绝对不会产生错误;3. 如果我把这个变量标记为“仅限内部使用”,就没有人尝试访问这个变量。

不要做任何设想,没有记录下来的设想会不断的制造缺陷,特别是随着代码的增长。凡是可能出错的事,准会出错。

防御性编程是一种细致、拘谨的编程方法。为了开发可靠的软件,我们要设计系统的每个组件,以使其尽可能的“保护”自己,我们通过明确的在代码中对设想进行检查,击碎了未记录下来的设想。这是一种努力,防止我们的代码被以一种错误的方式调用。

防御性编程不是检查错误,不是测试,也不是调试。

对于防御性编程的反对观点:1. 降低了代码开发的效率;2. 混淆了代码的职责,代码在执行必要的业务逻辑外,也要对各种设想进行判断。

对于防御性编程的支持观点:1. 节省大量的调试时间;2. 编写可以正确运行、只是速度有些慢的代码,要好于编写那些大多数时间都正常运行、但是有时会崩溃的代码;3. 我们这里所考虑的大部分防御性措施,并不具有任何明显的性能开销;4. 防御性编程避免了大量的安全问题。

我们可以使用一些编程技巧来进行防御性编程

使用好的编码风格和合理的设计。这样可以防范大多数的编码错误。最好地计算机程序的文本是结构清晰的。

不要仓促的编写代码。要三思而后行,一方面,要对将要写的代码出现的各种可能情况进行分析;另一方面,一定要在完成与一个代码段相关的所有任务后,再进入下一个环节。

不要相信任何人。不要设想所有的一切都运行良好,或者所有的代码都能正确的运行,用怀疑的眼光审视所有的输入和输出,知道你能证明它们是正确的。

编码的目标是清晰,而不是简洁。请保持代码简单。不能维护或者难以维护的代码是不安全的。

不要让任何人做他们不应该做的修补工作。内部的事情就应该留在内部。在开始编码时就应用防御性策略,要比改进代码时才使用容易的多。

编译时打开所有警告开关。编译器的警告可以捕捉到很多愚蠢的编码错误。在任何情况下都应该打开你的编辑器的警告功能,警告的出现总是有原因的。

使用静态分析工具。

使用安全的数据结构。

检查所有的返回值。不要让错误悄无声息的侵入你的程序;忍受错误会导致不可预知的行为。不论何时,都要在适当的级别上捕获和处理相应的一场。

审慎的处理内存和其他宝贵的资源。对于在执行期间获取的任何资源,必须彻底释放。不要因为觉得操作系统会在你的程序退出时清除程序,就不注意关闭文件或者释放内存。

在声明位置初始化所有变量。即应该将变量的声明和初始化放在一起,这样可以放置对未初始化的变量进行操作。

尽可能推迟一些声明变量。可以使变量的声明位置和使用它的位置尽量接近,从而防止它干扰代码的其他部分。不要在多个地方重用一个临时变量,变量重用会使以后对代码重新完善的工作变得一场复杂。

使用标准语言工具。

使用好的诊断信息日志工具。

审慎的进行强制转换。强制转换不仅可能会造成转换一场,还可能造成变量的精度发生变化。

我们可以使用约束来对我们的设想进行验证。约束分为:1. 前置条件; 2. 后置条件;3. 不变条件;4. 断言。

优秀的程序员:1. 关心他们的代码是否健壮;2. 确保每个设想都显式的体现了防御性代码中;3. 希望代码对无用信息的输入有正确的行为;4. 在编程的时候认真思考他们所编写的代码;5. 编写可以保护自己不受其他人的愚蠢伤害的代码。

糟糕的程序员:1. 不愿意去考虑他们的代码出错的情况;2。 为集成才发布可能出错的代码,并希望别人会找到错误;3. 将关于如何使用他们代码的信息仅仅攥在手里,并随时都可能将其丢弃;4. 很少思考他们正在编写的代码,从而产色很难干不可预知和不可靠的代码。

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值