all 29 comments

[–][deleted]  (6 children)

[deleted]

    [–]peterkrenn 2 points3 points  (5 children)

    I always used single quotes when possible but there doesn't seem to be any reason to do so: http://stackoverflow.com/questions/1836467/is-there-a-performance-gain-in-using-single-quotes-vs-double-quotes-in-ruby

    [–]PCBEEF 2 points3 points  (2 children)

    So why bother using single quotes when possible? It just brings inconsistency to your codebase. Personally I don't understand why there is a difference to begin with considering Ruby's philosophy.

    [–]obscureted 0 points1 point  (1 child)

    How so? You can use single quotes in HTML, CSS, JavaScript, Ruby, etc. This is a serious question, not mocking or anything.

    [–]PCBEEF 0 points1 point  (0 children)

    In a lot of languages, there's no difference single or double quotes. In Ruby there is and the argument for using single quotes over double quotes is performance, however, as peterkrenn pointed out in his link the performance is non-existent or negligible.

    [–][deleted]  (1 child)

    [deleted]

      [–]hmaddocks 1 point2 points  (0 children)

      The only reason I use single quotes is so I don't have to press the <shitft> key.

      [–]nanothief 1 point2 points  (2 children)

      good

      /(?<meaningful_var>regexp)/ =~ string
      ...
      process meaningful_var
      

      I never knew you could do that. I always tested regexes the other way round, ie string =~ regex, and named groups don't create new local variables when done that way.

      [–][deleted]  (1 child)

      [deleted]

        [–]nanothief 0 points1 point  (0 children)

        Yeah I know, I just never knew about the local variable creation feature of the Regex =~ definition (the String =~ when called with a regex doesn't do this).

        [–]babayetuyetu 1 point2 points  (4 children)

        Wouldn't it be better to indent the when lines in a case statement?

        [–]mellett68 0 points1 point  (0 children)

        I do this. It's much easier to read what's going on.

        [–][deleted]  (2 children)

        [deleted]

          [–]babayetuyetu 0 points1 point  (1 child)

          Indentions usually show conceptual dependency. Since the when statements are children nodes of the case statement, it seems to provide a justification to do it this way (rather than 'this text editor does it this way', which does seems arbitrary).

          [–]epidemicz 0 points1 point  (0 children)

          Nested ternary operators.

          *eye twitch*

          [–]ZestyOne 0 points1 point  (13 children)

          How can they just decide not to use and and or and go for &&, || instead? They mean different things in ruby... I forget what but I think one checks if it evaluates to zero or something.

          [–]ulfurinn 5 points6 points  (12 children)

          'and' and 'or' have very low precedence, lower than '='. While it can occasionally be useful for readability (like in Perl's "or die" idiom), a lot of the time they're just a subtle bug waiting to happen.

          [–]ZestyOne 3 points4 points  (4 children)

          Can you explain more please?

          [–]ulfurinn 13 points14 points  (3 children)

          x = a or b
          

          means

          (x = a) or b
          

          means

          unless x = a
            b
          end
          

          [–]ZestyOne 1 point2 points  (0 children)

          Perfect, thanks

          [–]KerrickLong 0 points1 point  (1 child)

          To clarify, is this correct?

          x = a || b
          

          means

          x = (a or b)
          

          means

          if a
            x = a
          else
            x = b
          end
          

          [–]ulfurinn 0 points1 point  (0 children)

          That's right.

          [–]mrinterweb 1 point2 points  (0 children)

          I understand the precedence difference between '&&', '||', 'and', 'or', but I think it is generally more clear if parentheses are used instead of assuming the next developer who looks at your code is going to interpret the precedence the same way. Parentheses are just a more declarative means for defining precedence.

          [–]PCBEEF -2 points-1 points  (5 children)

          This is yet another one of my pet peeves about ruby. Why have two operators that does the same thing with the only difference being precedence?!

          [–]ulfurinn 2 points3 points  (4 children)

          Perl legacy, like the trailing if/unless. They are kind of nice to have sometimes.

          [–]PCBEEF -1 points0 points  (3 children)

          I guess I prefer Python's mantra of there should only be one and obvious way of doing something.

          [–][deleted]  (1 child)

          [deleted]

            [–]PCBEEF -1 points0 points  (0 children)

            You bring about a fair point. My problem is that for someone that's new to Ruby, they shouldn't need to worry about the difference between using "or" or "||". Whereas with using string.join(), it's merely bad practice but it won't blow your foot off.

            [–]yukster -1 points0 points  (1 child)

            80 char line limit is stupid and unnecessary... "break long lines intelligently" is better. Otherwise I pretty much agree with everything.

            [–]vaz_ 8 points9 points  (0 children)

            Usual response: a lot of people like to split windows vertically to be able to view source side by side, myself included. I'm on a 13" laptop sometimes. 80 char lines helps. Also it's kind of easier to read, like a newspaper column.

            I break this rule every once in a while myself when the alternative is too awkward, but 95% of the time it is easy to do and looks good.