有人告诉我,好的开发人员可以当场/使用之间的区别Null,并False与0所有的其他的好"一无所有"的实体.
什么是区别,特别是在PHP?它与之有关===吗?
上面的话题让我做一些实验与bool和int的if状态.所以出于好奇我写了这个程序:
int f(int i)
{
if ( i ) return 99; //if(int)
else return -99;
}
int g(bool b)
{
if ( b ) return 99; //if(bool)
else return -99;
}
int main(){}
Run Code Online (Sandbox Code Playgroud)
g++ intbool.cpp -S 为每个函数生成asm代码,如下所示:
asm代码 f(int)
__Z1fi:
LFB0:
pushl %ebp
LCFI0:
movl %esp, %ebp
LCFI1:
cmpl $0, 8(%ebp)
je L2
movl $99, %eax
jmp L3
L2:
movl $-99, %eax
L3:
leave
LCFI2:
ret
Run Code Online (Sandbox Code Playgroud)asm代码 g(bool)
__Z1gb:
LFB1:
pushl %ebp
LCFI3: …Run Code Online (Sandbox Code Playgroud)我一直看到像这样检查的代码
if (IsGood == false)
{
DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
或这个
if (IsGood == true)
{
DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
我讨厌这种语法,并始终使用以下语法.
if (IsGood)
{
DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
要么
if (!IsGood)
{
DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
有没有理由使用' == true'或' == false'?
这是一个可读性的东西吗?人们只是不了解布尔变量?
另外,这两者之间是否有任何性能差异?
我刚刚在一些Exchange 2010代码中遇到过这段代码片段,我想知道是否有人知道程序员为什么这样做了.我从未见过像这样格式化的If语句.它看起来如此倒退必定有一个很好的理由吗?
if (true == MsgItem.HasAttachments)
{
// Code
}
Run Code Online (Sandbox Code Playgroud)
我假设它可能会对编码相同内容的各种其他方式进行一些优化;
if (MsgItem.HasAttachments)
{
// Code
}
Run Code Online (Sandbox Code Playgroud)
要么
if (MsgItem.HasAttachments == true)
{
// Code
}
Run Code Online (Sandbox Code Playgroud)
这不是什么大不了我只是好奇.
谢谢,迈克
更新:感谢所有有趣的观点.摘要似乎归结为传统编码标准.