防御式编程
  3XDZIv8qh70z 2023年11月02日 50 0

初探防御性编程

对于在刷题时遇到的一个小问题引发的学习

最近在力扣上尝试了有名的种花问题,也是世间流传的男厕不相容定律的问题:

假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组 flowerbed 表示花坛,由若干 01 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false

对于这个问题的整体思路并不难想到,但令人崩溃的是这个问题存在了边界问题,会出现许多特例,让人难崩,在我百思不得解挣扎许久后,扔人剩下了一个特例,于是我无可奈何只好去讨论区搜寻思路

结果,更难崩辣,讨论区运用了在前后都加了一个0来防止了所有边界问题的发生,妙哇,跟高中排列组合时的那些奇妙思路一样。

也就是防御式编程思想:在 flowerbed 数组两端各增加一个 0, 这样处理的好处在于不用考虑边界条件,任意位置处只要连续出现三个 0 就可以栽上一棵花。

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

防御性编程是一种编程习惯,是指预见在什么地方可能会出现问题,然后创建一个环境来测试错误,当预见的问题出现的时候通知你,并执行一个你指定的损害控制动作,如停止程序执行,将用户重指向到一个备份的服务器,或者开启一个你可以用来诊断问题的调试信息。这些防御性编程环境通常的构造方法有:添加声明到代码中,执行按契约进行设计,开发软件防御防火墙,或者简单添加用来验证用户输入的代码。

应用防御性编程技术,你可以侦测到可能被忽略的错误,防止可能会导致灾难性后果的“小毛病”的出现,在时间的运行过程中为你节约大量的调试时间。 比如说,你有一个基于WEB的期货交易系统,你已经建造了一个环境来不断检测应该程序与期货市场的连接。当这个环境侦测到一个连接失败,它会改变程序的执行,以使用被带到一个报告错误的页面,并指导他们可以使用电话交易系统。这种问题是被立即侦测到的,而损害控制的动作确保了你的客户可以有一个候选的方法来完成他们希望的动作。

防御性编程使我们可以尽早发现较小的问题,而不是等到它们发展成大的灾难的时候才发现。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
3XDZIv8qh70z
作者其他文章 更多