Language agnostic 布尔、英语否定和简单地去掉布尔

Language agnostic 布尔、英语否定和简单地去掉布尔,language-agnostic,Language Agnostic,通常,当您编写代码时,会有一个标志指示两种可能性,如下所示: CACHING_AUTHORIZED CACHING_UNAUTHORIZED 或 如果您随后使用布尔值来存储它,通常它只是“读起来很奇怪”: 或 其中一种可能是写: CACHING 然后简单地使用以下代码: if ( CACHING ) 或 但有时你真的需要“开”和“关”两种形式 问题是:无论你选择哪一个,它都不会有多大变化,无论你如何改变它,它都没有多大意义 这与布尔运算的“getter”问题并没有完全不同,这一问题肯定会引

通常,当您编写代码时,会有一个标志指示两种可能性,如下所示:

CACHING_AUTHORIZED
CACHING_UNAUTHORIZED

如果您随后使用布尔值来存储它,通常它只是“读起来很奇怪”:

其中一种可能是写:

CACHING
然后简单地使用以下代码:

if ( CACHING )

但有时你真的需要“开”和“关”两种形式

问题是:无论你选择哪一个,它都不会有多大变化,无论你如何改变它,它都没有多大意义

这与布尔运算的“getter”问题并没有完全不同,这一问题肯定会引起很多激烈的争论(我们应该使用isConditionTrue还是getIsCondition或isCondition或getCondition,还是仅仅使用condition或conditionTrue等等:我有点开玩笑,但问题是有道理的,关于这一点已经有了很长时间的争论,而且这个话题肯定不是很接近。)

我的问题是不同的:看到了吗

CACHING_ON = false;
CACHING_OFF = true;
也不是

有道理,我们不应该简单地去掉布尔值,然后做:

CACHING_ON = 1;
CACHING_OFF = 2;
当然,您正在丢失布尔值,但至少“1”和“2”不会带来任何混淆

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


在这里使用int是否不好?即使很难,也只有两种可能性?

您的方法不清楚该值是布尔值。我觉得我应该能够将值赋值为3

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

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

有趣的是,这样做甚至阻止了“主观”标签的使用。好像世界或每一个问题/答案都是黑色或白色的:)你为什么要同时使用ON和OFF表单?这两个字段互斥似乎是合乎逻辑的,它们不可能都是真的或假的。@Dave:因为当它被用作方法的参数时,几乎不可能读取。要么您只有一个表单,需要执行method(缓存)和method(!CACHING)(从英语的角度来看,后者是不可读的),要么您需要执行method(true)或method(false),这是存在多个参数时的主要PITA。
if ( !CACHING )
CACHING_ON = false;
CACHING_OFF = true;
CACHING_ON = true;
CACHING_OFF = false;
CACHING_ON = 1;
CACHING_OFF = 2;
CACHING = ON
CACHING = OFF
CACHING = EITHER
CACHING = UNKNOWN
CACHING = UNKNOWABLE
CACHING = UNTHINKABLE