

How to avoid problems with single line if statements - nimblegorilla
https://medium.com/@jonathanabrams/single-line-if-statements-2565c62ff492

======
escherize
Explicit is better than Implicit.

In Clojure:

    
    
        (if (is-of-age?) 
          (give-beer)) 

or

    
    
        (if (is-of-age?)
          (do (give-beer)
              (allow gambling)))
    

which is the same as:

    
    
        (when (is-of-age?)
          (give-beer)
          (allow gambling))

------
gabriel34
In VB:

    
    
       if age>ageLowLimit then
         givebeer
       end if
    

is equivalent to:

    
    
      if age>ageLowLimit then givebeer
    

and you can even mix both styles:

    
    
      if age>ageLowLimit then
        givebeer
        allowGambling
      else: giveSoda
      endif
    

Altough I use it when it improves readability (for instance, with short tests
and instructions), I don't like that you seem to open the code block with the
"then", but you don't close it.

------
nimblegorilla
I'm not a big fan of single line if statements. They seem to cause bugs more
often than necessary.

~~~
corysama
Too each his own. Personally, I keep hearing about these bugs, but I can count
maybe three times I've witnessed one first hand in two decades of coding. I
have however frequently witnessed cases of five single-line ifs in a row
stretched out into 30 lines of code. What could have been 5 lines of dense and
vertically symmetric code was instead a sea of noise and whitespace.

~~~
nimblegorilla
Seems like an exaggerated straw man. I don't see how anyone could reasonably
stretch a one-liner into 6.

But yeah - "dense" is an adjective that I try to avoid when coding. Code
should be clean, simple, and easy to read.

~~~
corysama

        if (test)
        {
            body;
        }
    
        if (...
    

So, 5 lines each. Not 6. I miscounted.

    
    
        if (test1) body1;
        if (test2) body2;
        if (test3) body3;
        if (test4) body4;
        if (test5) body2;
    

Between the two formats, I greatly prefer the second. It is understandable at
a glance and makes the possible error in the last line stand out much more. In
practice, I usually encounter the first style -even in cases as trivial as
single-function-call-per-if.

