• 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