滥用变量值?

时间:2011-02-22 15:12:45

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

我遇到了一个实例,其中特定问题的解决方案是使用一个变量,其值为零或以上意味着系统将在计算中使用该值,但小于零时表示不应使用该值一点都不。

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

这种被称为变量的滥用是什么? Meta-'something'或者是否有适合的经典反模式?

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

更新 一个例子是,如果变量的值是> 0我会使用该值,如果它是< = 0那么我不会使用该值并决定执行其他逻辑。

3 个答案:

答案 0 :(得分:1)

这些值通常称为“尊贵值”。到目前为止,参考类型的最常见显着值是null。紧随其后的是使用不同的值来表示异常情况(例如错误返回代码或搜索失败)。

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

使用区分值的常用替代方法是例外或明显键入的值,这些值不会被意外地相互混淆(例如MaybeOption类型。)

尽管如此,在内存可用性极其严格或其他严格的性能限制的环境中,卓越的价值观仍然可能发挥重要作用。

答案 1 :(得分:0)

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

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

我称之为一个神奇的数字。

希望这有帮助。

答案 2 :(得分:0)

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

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

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