当您编码时,您经常会有一个表示两种可能性的标志,如下所示:
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 )
但有时你真的想要'ON'和'OFF'形式。
事情是:它不会改变你选择的那个,无论你如何转动它都没有多大意义。
它与布尔的“getter”问题并不完全不同,这肯定会引起很多激烈的争论(我们应该使用 isConditionTrue 或 getIsCondition 或< em> isCondition 或 getCondition 或只是条件或 conditionTrue 等:我有点滑稽,但重点是关于这一点已经进行了很长时间的辩论,这个话题肯定不是很接近。)
我的问题不同:看不到
CACHING_ON = false;
CACHING_OFF = true;
,也不
CACHING_ON = true;
CACHING_OFF = false;
有道理,我们不应该简单地删除布尔值并执行:
CACHING_ON = 1;
CACHING_OFF = 2;
当然,你失去了布尔值,但至少'1'和'2'不能带来任何混乱。
我的观点是:使用布尔值和true / false经常令人困惑,因为我们混合了两个不同的东西:英语和逻辑,而且它们根本就不混合。
在这里使用 int 是不是很糟糕,即使只有两个可能性很难?
答案 0 :(得分:1)
您的方法不清楚该值是否为布尔值。我觉得我应该能够分配值3。
我真的不明白你的观点。如果您有2个布尔值,则表示4种可能的状态,因此您不应该以一种暗示只有2个选项的方式命名变量。也许你应该使用枚举和常量或标志。
CACHING = ON
CACHING = OFF
CACHING = EITHER
CACHING = UNKNOWN
CACHING = UNKNOWABLE
CACHING = UNTHINKABLE