• shagie@programming.dev
      link
      fedilink
      arrow-up
      2
      ·
      1 year ago

      But why would 3?"stuff":"empty" work and foo?"stuff":"empty" not work?

      Syntactically significant whitespace is a nightmare to deal with.

      • jvisick@programming.dev
        link
        fedilink
        arrow-up
        3
        ·
        1 year ago

        I agree! I don’t think 3?”stuff”:”empty” should work at all because I think it’s an insane way to type a ternary :) I’m also very open to admitting that it’s just my own strongly worded opinion.

        I think that in most cases, syntactically significant whitespace is a horrible idea - the one exception being that you should have space between operators/identifiers/etc. I don’t care how much, and 4 spaces should have no more special meaning than 1, but I do think that using a space to indicate “this thing is a different thing than the thing before it” is important.

        • shagie@programming.dev
          link
          fedilink
          arrow-up
          2
          ·
          edit-2
          1 year ago

          Talking with a rubyist:

          • 3?"bar":"qux" only has the ternary expression as a valid parsing of ?
          • foo?"bar":"qux" fails because foo may be a method and foo? is also a valid method identifier.
          • foo ?"bar":"qux" fails because ?" uses the ? unary operator that makes the next character a string. So ?"bar" becomes the string " followed by what looks to be an identifier.

          And so…

          • ? character is a valid part of an identifier (but only at the end of a method name)
          • ?x unary operator to create a String from a character
          • expr?expr:expr ternary operator

          And so…

          puts "".empty? ? ?t:?f