Caf*_*eek 9 language-agnostic if-statement coding-style xor
自从阅读清洁代码以来,我一直在努力保持代码的描述性和易于理解.我有一个条件,必须填写A或B.但不是两者.而不是.目前if,检查这种情况的声明很难一目了然.您将如何编写以下内容,以便一目了然地查看正在检查的内容
if ((!string.IsNullOrEmpty(input.A) && !string.IsNullOrEmpty(input.B))
|| string.IsNullOrEmpty(input.A) && string.IsNullOrEmpty(input.B))
{
throw new ArgumentException("Exactly one A *OR* B is required.");
}
Run Code Online (Sandbox Code Playgroud)
Jus*_*ner 24
异或的时间:
if(!(string.IsNullOrEmpty(input.A) != string.IsNullOrEmpty(input.B)))
throw new ArgumentException("Exactly one A *OR* B is required.");
Run Code Online (Sandbox Code Playgroud)
你也可以看到它写成:
if(!(string.IsNullOrEmpty(input.A) ^ string.IsNullOrEmpty(input.B)))
throw new ArgumentException("Exactly one A *OR* B is required.");
Run Code Online (Sandbox Code Playgroud)
Nor*_*ame 13
if (string.IsNullOrEmpty(input.A) != string.IsNullOrEmpty(input.B)) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
Hen*_*rik 12
它是一个异或,它很容易模仿.
想想看:
两者都不可能是真的,两者都不能是假的.一个必须是真的,一个必须是假的.
所以,我们来看看:
if(string.IsNullOrEmpty(input.A) == string.IsNullOrEmpty(input.B)) {
throw new ArgumentException("Exactly one A *OR* B is required.");
}
Run Code Online (Sandbox Code Playgroud)
如果两者相等,则它们都是真的,或者都是假的.这两种情况都是无效的.
而没有任何特殊XOR运算符的所有选择语言可能没有.;)
这种关系称为exclusive-or(xor).
有些语言将其作为运算符提供 - 通常是^:
True ^ True -> False
True ^ False -> True
False ^ True -> True
False ^ False -> False
Run Code Online (Sandbox Code Playgroud)