gpt4 book ai didi

language-agnostic - 最喜欢的(聪明的)防御性编程最佳实践

转载 作者:行者123 更新时间:2023-12-03 04:22:49 25 4
gpt4 key购买 nike

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。




8年前关闭。




如果您必须选择您的 收藏 (聪明的)防御性编码技术,它们是什么?虽然我目前的语言是 Java 和 Objective-C(有 C++ 背景),但可以随意用任何语言回答。这里的重点是巧妙的防御技术,而不是我们这里 70% 以上的人已经知道的技术。所以现在是时候深入挖掘你的技巧了。

换句话说,尝试想到除此之外的其他无趣例子:

  • if(5 == x) 而不是 if(x == 5) : 避免意外分配

  • 以下是一些 的一些示例耐人寻味 最佳防御性编程实践(特定于语言的示例在 Java 中):

    - 锁定您的变量,直到您知道需要更改它们

    也就是说,您可以声明所有变量 final直到您知道需要更改它,此时您可以删除 final .一个普遍不为人知的事实是,这对方法参数也有效:
    public void foo(final int arg) { /* Stuff Here */ }

    - 当坏事发生时,留下证据

    当您遇到异常时,您可以做很多事情:很明显,记录它并执行一些清理工作就很少了。但是您也可以留下证据的痕迹(例如,将变量设置为“无法加载文件”或 99999 之类的标记值在调试器中很有用,以防您碰巧跳过异常 catch -block)。

    - 谈到一致性:细节决定成败

    与您正在使用的其他库保持一致。例如,在 Java 中,如果您正在创建一个提取一系列值的方法,则使下限包含在内,上限不包含在内。这将使其与 String.substring(start, end) 之类的方法保持一致。以同样的方式运作。您会在 Sun JDK 中发现所有这些类型的方法都以这种方式运行,因为它进行各种操作,包括与数组一致的元素迭代,其中索引从零(包含)到数组的长度(不包含)。

    那么,你最喜欢的一些防守做法是什么?

    更新:如果你还没有,请随时加入。在我选择正式答案之前,我会给更多回复的机会。

    最佳答案

    在 C++ 中,我曾经喜欢重新定义 new 以便它提供一些额外的内存来捕获栅栏发布错误。

    目前,我更喜欢避免防御性编程,而倾向于 Test Driven Development .如果您在外部快速捕获错误,则无需通过防御性操作来混淆您的代码,您的代码是 DRY -er 并且您最终需要防御的错误更少。

    As WikiKnowledge Wrote :

    Avoid Defensive Programming, Fail Fast Instead.

    By defensive programming I mean the habit of writing code that attempts to compensate for some failure in the data, of writing code that assumes that callers might provide data that doesn't conform to the contract between caller and subroutine and that the subroutine must somehow cope with it.

    关于language-agnostic - 最喜欢的(聪明的)防御性编程最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/490420/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com