【问题标题】:Misuse of a variables value?滥用变量值?
【发布时间】:2011-02-22 15:12:44
【问题描述】:

我遇到了一个实例,其中解决特定问题的方法是使用一个变量,其值在零或大于零时意味着系统将在计算中使用该值,但当小于零时表示不应使用该值完全没有。

我最初的想法是我不喜欢变量值的多用途使用:a.) 作为公式中使用的范围; b.) 作为一种控制逻辑。

这种对变量的滥用叫什么? Meta-'something' 还是有适合的经典反模式?

感觉就像当数据库字段设置为 null 以表示不使用值,如果它不为 null 则使用该字段中的值。

更新: 例如,如果变量的值 > 0,我将使用该值,如果它

【问题讨论】:

  • 举个例子会很有用。

标签: programming-languages coding-style anti-patterns


【解决方案1】:

诸如此类的值通常被称为“可区分值”。到目前为止,对于引用类型,最常见的区别值是 null。紧随其后的是使用可区分的值来指示异常情况(例如错误返回代码或搜索失败)。

区分值的问题是所有客户端代码都必须知道这些值的存在及其相关语义。实际上,这通常意味着必须将某种条件逻辑包裹在每个获得此类值的调用站点周围。太容易忘记添加该逻辑,从而获得不正确的结果。它还促进复制和粘贴代码,因为处理可区分值所需的样板代码在整个应用程序中通常非常相似,但难以封装。

使用可区分值的常见替代方法是异常,或不能意外混淆的明确类型的值(例如MaybeOption 类型)。

话虽如此,在内存可用性非常紧张或其他严格的性能限制的环境中,显着值仍可能发挥重要作用。

【讨论】:

  • 您的术语是“杰出价值”,它在其他地方是否作为公认的概念存在。不要错过你的答案,只是想获得尽可能多的具体信息。谢谢
  • Distinguished value 被广泛使用,尽管我在通常的地方找不到一个简洁的词汇表条目(阅读:“维基百科”)。
【解决方案2】:

我不认为你的描述是纯粹的magic number,但它有点接近。这类似于 .NET 2.0 之前的情况,您可以使用 Int32.MinValue 来指示空值。 .NET 2.0 引入了 Nullable 并在某种程度上缓解了这个问题。

所以你在描述一个变量的使用,这个变量的值实际上意味着它的值以外的东西——-1 意味着与我上面描述的 Int32.MinValue 的使用基本相同。

我称它为幻数。

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    当用于数据和程序代码的 RAM 和磁盘空间不足时,使用变量可能值的不同范围来调用不同的功能是很常见的。现在,您可以使用函数或附加值(布尔值或枚举)来确定要采取的操作。

    当前操作系统建议 1GiB 的 RAM 可以正常运行,而几年前 256KiB 的内存还很高。廉价的磁盘空间在几个月内从数百 MiB 变为 TiB 的倍数。不久前,我为 640KiB 的 RAM 和 10MiB 的磁盘编写了程序,你可能会讨厌它们。

    我认为如果它只是几年前处理这样的代码会很好(重构它!),如果它是最近的,则谴责它是不好的做法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      相关资源
      最近更新 更多