2010-08-11 78 views
0

很多时候,当你的代码,你有一个标志,指示两种可能性,就像这样:布尔,英语否定只是摆脱布尔

CACHING_AUTHORIZED 
CACHING_UNAUTHORIZED 

CACHING_ON 
CACHING_OFF 

如果再使用布尔存储这个,很多时候只是“读怪异”:

CACHING_ON = false; 
CACHING_OFF = true; 

CACHING_ON = true; 
CACHING_OFF = false; 

其中一个可能性是写:

CACHING 

而使用则只需代码:

if (CACHING) 

if (!CACHING) 

但有时你确实想同时得到'开'和'关'形式。

事情是:它不会改变你挑选的哪一个,它根本没有多大意义,不管你如何打开它。

这并非完全不同的“吸气”问题布尔,这当然是受到了很多激烈的争论(我们应该用isConditionTruegetIsConditionisConditiongetCondition或者干脆条件conditionTrue等:我有点滑稽,但这一点立场,并且在这方面进行了很长时间的辩论,而且这个话题肯定不是很接近)。

我的问题是不同的:可见,无论是

CACHING_ON = false; 
CACHING_OFF = true; 

也不

CACHING_ON = true; 
CACHING_OFF = false; 

意义,不应该干脆摆脱了布尔的和做的事:

CACHING_ON = 1; 
CACHING_OFF = 2; 

当然,你失去了布尔值,但至少'1'和'2'不能 b响任何混乱。

我的观点是:使用布尔值和真/假通常是令人困惑的,因为我们混合了两种不同的东西:英语和逻辑,他们根本就没有混合。

在这里使用int难道只有两种可能吗?

+0

有趣的是如何防止'主观'标签被使用。就好像世界或每个问题/答案都是黑色或白色:) – NoozNooz42 2010-08-11 15:24:29

+1

为什么要同时打开和关闭窗体?看起来合乎逻辑的是,这两个领域是相互排斥的,它们都不可能是真的或是假的。 – 2010-08-11 16:13:43

+0

@Dave:因为当它用作方法的参数时,它几乎不可能读取。要么你只有一种形式,并且需要做*方法(CACHING)*和*方法(!CACHING)*(后者从英文角度看是不可读的)**或者**你需要做*方法(true) *或* method(false)*当有多个参数时,这是主要的PITA。 – NoozNooz42 2010-08-11 23:32:07

回答

1

你的方法使得它不清楚该值是一个布尔值。我觉得我应该能够分配值3.

我真的不明白你的意思。如果你有2个布尔值,你代表4个可能的状态,所以你不应该用一种暗示只有2个选项的方式来命名变量。也许你应该使用枚举和常量或标志。

CACHING = ON 
CACHING = OFF 
CACHING = EITHER 
CACHING = UNKNOWN 
CACHING = UNKNOWABLE 
CACHING = UNTHINKABLE