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

使程序正确和使程序能用的区别: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. 很少思考他们正在编写的代码,从而产色很难干不可预知和不可靠的代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值