逻辑上的“!”操作员很难看到,这篇文章是关于寻找解决/解决这个问题的最佳方法。
问题是英语单词“not”颠倒了整个句子的含义,因此许多堆栈溢出帖子都包含大写的“NOT”,以澄清它不是偶然输入的。
但是一些天才的想法是让编程世界“不再”是一个小“!” (感叹号,大多数新的编程语言只是复制粘贴这个想法)。
例如,我们的
C++
项目有一个错误(现已修复),因此我们开始将所有最近更改的文件与相同文件的旧版本控制实例进行比较,我们发现没有任何文件导致任何文件中的错误,因此我们缩小了范围将比较范围与与问题最相关的 10 个文件进行比较,并再次尝试,但即使这样,也花了一周时间才注意到有一个意外的“!”,反转了导致所述错误的单个 if 条件。
我们项目的函数和变量名称已经有意义,注释已经说明了 if 条件应该做什么,并且 Qt 编码风格指南已经采用,并且项目已经有了单元测试。
但是这些都没有使错误变得更加明显,因为:
记住问题是,如何制作“!”更明显,这不是如何进行更多的单元测试,而且因为在注释中编写代码的可读性比代码更差,所以这不是如何使注释包含 if 条件的每个细节。
在我们以后的项目中,为了防止提到的“例子”,我们尝试了以下方法,但每种方法都有自己的问题。
重复标记,如
if (!!!myVariable) { ... }
“重复”的问题在于我们不知道“
”是否是本意,或者“!!
”是否正确。!!!
间距,如
if ( ! myVariable) { ... }
间距的问题在于它会产生“!”只是稍微更明显一点。
“
NOT
”和“not”宏,如if (NOT myVariable) { ... }
。
“
”宏的问题是,C++语言允许内联汇编语言,但没有太多标准,因此有些CPU架构的汇编需要“NOT”字,有些则不需要。NOT
最后,自定义 force-inline 函数(不使逻辑变慢),如
if (qNot(myVariable)) { ... }
这是最明显的方法,但自定义强制内联函数的问题是:
- 它需要两个额外的括号,因此更难使用,并且不值得付出努力。
- Java 和 PHP 语言没有强制内联函数之类的东西。
目前我们继续使用“Spacing”,因为使用“自定义强制内联函数”根本不值得付出努力。
但至少我们做了一些事情,并鼓励其他人也这样做;-)
注意,虽然示例是在
中,但我会用“!”标记每种编程语言。如果可以的话请签名。C++
我建议您使用标准解决方案:使用
not
而不是 !
。