Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. Code style question - disparate then/else sizes

Code style question - disparate then/else sizes

Scheduled Pinned Locked Moved The Lounge
questionlinux
39 Posts 24 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Marc Clifton

    if statements are evil. If they can't be handled by inheritence, or it doesn't make sense to express the logic in a state or decision graph, then (no pun intended on this sentence):

    if ([some expression]
    {
    DoThis();
    }
    else
    {
    DoThat();
    }

    rather than embedding a bunch of probably re-usable code in the statement itself. Besides, it makes it a lot more readable as to what you're doing. Of course, yes, there are exceptions. Marc

    Thyme In The Country Interacx My Blog

    R Offline
    R Offline
    Robert Surtees
    wrote on last edited by
    #29

    Marc Clifton wrote:

    if statements are evil.

    First they make goto's evil, and now if's? I think it's time for me to retire. :sigh:

    M 1 Reply Last reply
    0
    • R Robert Surtees

      Marc Clifton wrote:

      if statements are evil.

      First they make goto's evil, and now if's? I think it's time for me to retire. :sigh:

      M Offline
      M Offline
      Marc Clifton
      wrote on last edited by
      #30

      Robert Surtees wrote:

      First they make goto's evil, and now if's? I think it's time for me to retire.

      I'm actually of the mind that gotos are less evil than if's. An if statement results in one or more conditional code branches, which is harder to test than an unconditional goto. When I write an if nowadays, I consciously think "what is the else" and "ok, now I have to test BOTH conditions." I end up often looking at a better way to code the routine that doesn't require an if, and surprisingly, a lot of times I find a way. Marc

      Thyme In The Country Interacx My Blog

      R 1 Reply Last reply
      0
      • T Tom Delany

        Andy Brummer wrote:

        About 75% or higher of my if statements are checking for conditions that result in exiting the method early

        A little off topic: When you do that, do you just exit the method at that point? It was always drilled into my head that all methods (in the old days we called them "functions") should only have one exit point, but if I try to follow that mandate in situations like you described above, I end up jumping through hoops to make that happen, so I often tend to be "guilty" of simply putting a "return" inside my if at the point I want it to exit. Hopefully that does not brand me as a horrible coder. I had one coworker who thought it was neat to get around that (in C/C++) by coding something like:      do      {          if (somecondition)              break;          if (someothercondition)              break;          //etc.      } while (false) (It will execute the above loop only one time as coded.) I always thought that was simply horrible!

        WE ARE DYSLEXIC OF BORG. Refutance is systile. Your a$$ will be laminated.

        A Offline
        A Offline
        Andy Brummer
        wrote on last edited by
        #31

        I always thought that came from long overly complicated methods that had a lot of state to "unroll" when you exited from the method. Also, if you are using raw new/delete calls, then this is almost impossible to do. In C++ it really requires using some kind of smart pointer to support. If I'm not able to cleanly throw an exception or exit with a simple return then I simplify the method until I can. If there is too much going on, I'll even create a transactional object that I can just throw away. I agree with you about that do while crap. Ugh.


        This blanket smells like ham

        T 1 Reply Last reply
        0
        • T Tom Delany

          Andy Brummer wrote:

          About 75% or higher of my if statements are checking for conditions that result in exiting the method early

          A little off topic: When you do that, do you just exit the method at that point? It was always drilled into my head that all methods (in the old days we called them "functions") should only have one exit point, but if I try to follow that mandate in situations like you described above, I end up jumping through hoops to make that happen, so I often tend to be "guilty" of simply putting a "return" inside my if at the point I want it to exit. Hopefully that does not brand me as a horrible coder. I had one coworker who thought it was neat to get around that (in C/C++) by coding something like:      do      {          if (somecondition)              break;          if (someothercondition)              break;          //etc.      } while (false) (It will execute the above loop only one time as coded.) I always thought that was simply horrible!

          WE ARE DYSLEXIC OF BORG. Refutance is systile. Your a$$ will be laminated.

          M Offline
          M Offline
          Mike Dimmick
          wrote on last edited by
          #32

          Yes, always an early return. Don't futz around with loops: the programmer's expectation is that there are at least some circumstances where the loop will be executed at least once. It's basically trying to avoid two programming taboos, drummed into us by the idiots we call professors: single entry, single exit; and that goto is evil. Neither are correct.

          DoEvents: Generating unexpected recursion since 1991

          1 Reply Last reply
          0
          • M Marc Clifton

            Robert Surtees wrote:

            First they make goto's evil, and now if's? I think it's time for me to retire.

            I'm actually of the mind that gotos are less evil than if's. An if statement results in one or more conditional code branches, which is harder to test than an unconditional goto. When I write an if nowadays, I consciously think "what is the else" and "ok, now I have to test BOTH conditions." I end up often looking at a better way to code the routine that doesn't require an if, and surprisingly, a lot of times I find a way. Marc

            Thyme In The Country Interacx My Blog

            R Offline
            R Offline
            Robert Surtees
            wrote on last edited by
            #33

            lol -- probably should have used a smiley instead of a sigh. Reducing complexity is always a Good Thing.

            1 Reply Last reply
            0
            • D Dan Neely

              If you have an if/else with one branch significantly larger than the other, how do you normally order them when keeping the conditional understandable doesn't drive the decision?

              if (x < 10)
              {
              //short code block
              }
              else
              {
              //long code block
              }

              of like this:

              if (10 <= x)
              {
              //long code block
              }
              else
              {
              //short code block
              }

              Otherwise [Microsoft is] toast in the long term no matter how much money they've got. They would be already if the Linux community didn't have it's head so firmly up it's own command line buffer that it looks like taking 15 years to find the desktop. -- Matthew Faithfull

              R Offline
              R Offline
              Ravi Bhavnani
              wrote on last edited by
              #34

              I'd place the shorter block first so that you don't have to scroll down to check for the existence of an else clause. Of course, this assumes (as you mentioned) that your decision is isn't driven by the need to have positive logic in the if test. /ravi

              This is your brain on Celcius Home | Music | Articles | Freeware ravib(at)ravib(dot)com

              1 Reply Last reply
              0
              • A Andy Brummer

                I always thought that came from long overly complicated methods that had a lot of state to "unroll" when you exited from the method. Also, if you are using raw new/delete calls, then this is almost impossible to do. In C++ it really requires using some kind of smart pointer to support. If I'm not able to cleanly throw an exception or exit with a simple return then I simplify the method until I can. If there is too much going on, I'll even create a transactional object that I can just throw away. I agree with you about that do while crap. Ugh.


                This blanket smells like ham

                T Offline
                T Offline
                Tom Delany
                wrote on last edited by
                #35

                Andy Brummer wrote:

                I agree with you about that do while crap. Ugh.

                Aaarghhh!!! :omg: :wtf: I found it in "Coding Horrors", and it was not supposed to be the "horror": http://www.codeproject.com/Feature/CodingHorrors.aspx?msg=2323029#xx2323029xx[^]

                WE ARE DYSLEXIC OF BORG. Refutance is systile. Your a$$ will be laminated.

                1 Reply Last reply
                0
                • T Tom Delany

                  Andy Brummer wrote:

                  About 75% or higher of my if statements are checking for conditions that result in exiting the method early

                  A little off topic: When you do that, do you just exit the method at that point? It was always drilled into my head that all methods (in the old days we called them "functions") should only have one exit point, but if I try to follow that mandate in situations like you described above, I end up jumping through hoops to make that happen, so I often tend to be "guilty" of simply putting a "return" inside my if at the point I want it to exit. Hopefully that does not brand me as a horrible coder. I had one coworker who thought it was neat to get around that (in C/C++) by coding something like:      do      {          if (somecondition)              break;          if (someothercondition)              break;          //etc.      } while (false) (It will execute the above loop only one time as coded.) I always thought that was simply horrible!

                  WE ARE DYSLEXIC OF BORG. Refutance is systile. Your a$$ will be laminated.

                  E Offline
                  E Offline
                  Erik Funkenbusch
                  wrote on last edited by
                  #36

                  Actually, that's not horrible at all. It's a very slick and elegant way to handle the problem. I used to use this form: #define EVER ;; for(EVER) { if (blah) break; ... break; } Your co-workers solution solves the problem of accidentally forgetting the final break (which i've been bit by a few times). I don't really call that "jumping through hoops" though, It's a pretty common pattern, therefore programmers will expect it. The "one entrance, one exit" rule was put in place because it encourages simplification of the code. Lots of returns within code is often a symptom of overly complex code. It's easier to just return than to clean up after yourself.

                  -- Where are we going? And why am I in this handbasket?

                  T 1 Reply Last reply
                  0
                  • J JoeSox

                    I :love: #region !!

                    Later, JoeSox CPMCv1.0 ? humanaiproject.org ? Last.fm ? pswrdgen

                    B Offline
                    B Offline
                    Brady Kelly
                    wrote on last edited by
                    #37

                    So do I, but definitely not in code blocs.

                    My head asplode!

                    Calling all South African developers! Your participation in this local dev community will be mutually beneficial, to you and us.

                    1 Reply Last reply
                    0
                    • D Dan Neely

                      If you have an if/else with one branch significantly larger than the other, how do you normally order them when keeping the conditional understandable doesn't drive the decision?

                      if (x < 10)
                      {
                      //short code block
                      }
                      else
                      {
                      //long code block
                      }

                      of like this:

                      if (10 <= x)
                      {
                      //long code block
                      }
                      else
                      {
                      //short code block
                      }

                      Otherwise [Microsoft is] toast in the long term no matter how much money they've got. They would be already if the Linux community didn't have it's head so firmly up it's own command line buffer that it looks like taking 15 years to find the desktop. -- Matthew Faithfull

                      realJSOPR Offline
                      realJSOPR Offline
                      realJSOP
                      wrote on last edited by
                      #38

                      I don't do it by size of the code block. I do it according to the result of the if statement. I do the "true" result first, and the "false" result second.

                      "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997
                      -----
                      "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001

                      1 Reply Last reply
                      0
                      • E Erik Funkenbusch

                        Actually, that's not horrible at all. It's a very slick and elegant way to handle the problem. I used to use this form: #define EVER ;; for(EVER) { if (blah) break; ... break; } Your co-workers solution solves the problem of accidentally forgetting the final break (which i've been bit by a few times). I don't really call that "jumping through hoops" though, It's a pretty common pattern, therefore programmers will expect it. The "one entrance, one exit" rule was put in place because it encourages simplification of the code. Lots of returns within code is often a symptom of overly complex code. It's easier to just return than to clean up after yourself.

                        -- Where are we going? And why am I in this handbasket?

                        T Offline
                        T Offline
                        Tom Delany
                        wrote on last edited by
                        #39

                        Fair enough. Cheers,

                        WE ARE DYSLEXIC OF BORG. Refutance is systile. Your a$$ will be laminated.

                        1 Reply Last reply
                        0
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        • Login

                        • Don't have an account? Register

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • World
                        • Users
                        • Groups