Sign in to follow this  

Your one stop shop for the cause of all coding horrors

This topic is 1394 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

gameState could be a constant though (just not all caps). This one guy I know uses constants to do boolean operations rather than using true or false. If the state of the game never changes then sure....

RUNNING = 0
gameState= 0
 
while (RUNNING == gameState) 
{//Run Game Code}
Edited by Tutorial Doctor

Share this post


Link to post
Share on other sites

I've personally never understood Yoda-expressions or whatever they are called, because of the inconsistency - you can't do this if you are comparing two things that are both non-constant, so you've got this bizarre programming "trick" that only works on a subset of your expressions. I feel relying on things like this just make it more likely I'll get into a bad habit and screw up when I'm meaning to compare two non-constants.

 

I personally prefer to just pay attention to the compiler warning me about a possible wrong assignment in a conditional. I do still occasionally make this typo but the compiler has been warning be about it for at least the last ten years.

Share this post


Link to post
Share on other sites
Good word Aardvajk. It's more so about habits, and it seems good ones should be developed early on. I think it has something to do with how the person was taught to program. There are generalized standards, but no book of standards. I do doubt people would follow that book of standards anyway, but there are perhaps some standards everyone can agree on?

Share this post


Link to post
Share on other sites

I've personally never understood Yoda-expressions or whatever they are called, because of the inconsistency - you can't do this if you are comparing two things that are both non-constant, so you've got this bizarre programming "trick" that only works on a subset of your expressions. I feel relying on things like this just make it more likely I'll get into a bad habit and screw up when I'm meaning to compare two non-constants.

 

I personally prefer to just pay attention to the compiler warning me about a possible wrong assignment in a conditional. I do still occasionally make this typo but the compiler has been warning be about it for at least the last ten years.

 

Same here. I can see why people would like this trick if they get into the habit, but I started with traditional "if variable == constant/variable" as well and frankly I never found it difficult to not mess up. Unless you have a really poor monospace font, = and == look nothing alike, and if you do screw up the compiler does point it out (I mean, guys, seriously, crank up those warning settings, and actually fix them when they appear, otherwise you really have no leg to stand on about the compiler being unhelpful).

 

It definitely has to do with how you were taught. Old habits die hard, and bad habits tend to take even more time to go away (because bad habits have a tendency of working great at first, before suddenly coming crashing down all around you and requiring a complete redesign). It is in my opinion healthy to always question your own code style to some extent from time to time, I definitely know mine has changed wildly over the years when I found some stuff didn't work well or wasn't consistent enough, etc..

Share this post


Link to post
Share on other sites


I personally prefer to just pay attention to the compiler warning me about a possible wrong assignment in a conditional. I do still occasionally make this typo but the compiler has been warning be about it for at least the last ten years.

 

Me too.

I'm sure this habit was invented before compilers were as good as they are today with warnings and such.

Share this post


Link to post
Share on other sites
I enjoyed this - thanks for sharing.
 
Also:
// somedev1 -  6/7/02 Adding temporary tracking of Login screen
// somedev2 -  5/22/07 Temporary my ass
The history of software development in a nutshell.

Share this post


Link to post
Share on other sites

I enjoyed this - thanks for sharing.
 
Also:

// somedev1 -  6/7/02 Adding temporary tracking of Login screen
// somedev2 -  5/22/07 Temporary my ass
The history of software development in a nutshell.

 

 

When I was just programming for fun, i saw that thread and laughed. Oh how i laughed. Now that i'm getting paid to maintain someone else's code... :(

Share this post


Link to post
Share on other sites
Yoda

 

Not forget you must, that in different form, use this construct you do. Yes, yes.

 

This not like you do:

if(5 == function())
    //if five it is, this function

 

but this accept you do:

if(!function())

    // if not true it is, this function

 

 

(Though I can't help myself stopping completely puzzled for an instant every time I see Yoda code, too)

 

Then again...

 

if(!(5== func()) && !other_func())

    // If not five is func, and only execute not other func

Edited by samoth

Share this post


Link to post
Share on other sites

 


Maybe, but as the article says, it like saying "if blue is the sky" or "if tall is the man", it's just harder to read this way imo. Forgetting a '=' is not an excuse for writing harder to read code imo, since that doesn't happen very often.

It happens an awful lot more than you might expect. Defensive coding is important, and it often comes at a perceived cost to readability.

 

I'd honestly be rather alarmed to meet a senior engineer who didn't write their conditions that way, when coding in C++.

 

 

And, as with a lot of coding practices, it probably varies depending on the kind of company you keep. I predominantly come across this particular convention from engineers who like to follow simple rules but cannot think about the implications of their design decisions or create a decent interface to save their lives. Do I think this is true of all engineers who follow this rule, no. But I do find it hard to shake the weight of evidence I have come across :)

 

-Josh

Share this post


Link to post
Share on other sites

Nice article, i personally hate with passion the "Yoda Conditions".

 

ex: if(5 == count)

 

I understand why they are done though.  If someone mistypes or is just used to a language with only a single '=',  and does

 if(count = 5)

They will only get a warning (and they didn't always get a warning back in the olden days).  While 

 if(5 = count)

Will error.

 

And honestly, there should never be a plain number in an if statement anyway, it should be a constant or #define somewhere, like so:

if(kMaxSize == count)

which tends to make it look less nonsensical and yoda like.

Share this post


Link to post
Share on other sites

 

Nice article, i personally hate with passion the "Yoda Conditions".

 

ex: if(5 == count)

 

I understand why they are done though.  If someone mistypes or is just used to a language with only a single '=',  and does

 if(count = 5)

They will only get a warning (and they didn't always get a warning back in the olden days).  While 

 if(5 = count)

Will error.

 

And honestly, there should never be a plain number in an if statement anyway, it should be a constant or #define somewhere, like so:

if(kMaxSize == count)

which tends to make it look less nonsensical and yoda like.

 

Honestly, after so long this stops being a problem, maybe the occasional mistype occurs, but really this is something that's only prevalent in new/inexperienced programmers.

Share this post


Link to post
Share on other sites

I understand why they are done though. If someone mistypes or is just used to a language with only a single '=', and does

if(count = 5)

They will only get a warning (and they didn't always get a warning back in the olden days). While

if(5 = count)

Will error.

 

I agree with slicer4ever, thats kind of like saying one should always return a pointer instead of a reference because someone might forget to type the "&" at the receiving variable declaration and create an accidential copy. To sparse of an event to adjust your coding routine to that kind of stuff.

Edited by Juliean

Share this post


Link to post
Share on other sites
Sign in to follow this