3

I don't understand why it is a best practice to use positive logic in an if block

http://msdn.microsoft.com/en-US/library/aa629483.aspx

Preferred:

if (true) 
{ 
   ... 
} 
else 
{ 
   ... 
} 

Why it is a best practice to have positive logic in an if block?

Gainster
  • 5,481
  • 19
  • 61
  • 90

3 Answers3

15

It's generally regarded as easier to understand.

if (!ICanDoThis)
{
    // don't do it
}
else
{
    // do it
}

vs.

if (ICanDoThis)
{
    // do it
}
else
{
    // don't do it
}    

Your logic may be crystal-clear to you today, but think of the developer who happens across it a couple of years from now.

But like everything else, this is only a guideline. Specifically, I use something like "negative logic" with error checking:

if (!myParametersAreValid)
{
    // fail out
}

DoWorkWith(myParameters)

I avoid a cascade of conditionals that "positive logic" would otherwise require.

Michael Petrotta
  • 59,888
  • 27
  • 145
  • 179
1

I have always seen people test the most probable outcome first. For example modal dialogs normally have a default button(highlighted) You see this because it is most probable or most common that this will be used.So if you are expecting true you would see

if (true) {

} else {

}
James Parsons
  • 6,097
  • 12
  • 68
  • 108
1

I sometimes do a semi-positive logic like this. I think it's technically positive logic because it doesn't use "not" operators. I sometimes find it hard to always use positive logic because it ends up making my code un-clean:

if (ICanDoThis == false)
{
  // I can't do this
}
else
{
  // I can do this
}
Alex Kwitny
  • 11,211
  • 2
  • 49
  • 71