• Phoenixz@lemmy.ca
    link
    fedilink
    arrow-up
    11
    arrow-down
    1
    ·
    1 day ago

    Meanwhile JavaScript: 1+“2” = “12”

    Just had fun with that yesterday

    • dual_sport_dork 🐧🗡️@lemmy.world
      link
      fedilink
      English
      arrow-up
      2
      arrow-down
      2
      ·
      edit-2
      1 day ago

      You can wind up in the same trap in VB/VBA as well. It baffles me that in this current century there are still languages where text concatenation symbols and mathematical operators are the same character.

      It’s even worse in the case of VB because you can also use & explicitly to concatenate strings, whereas + can be either a mathematical operator or a string concatenator depending on context and the types of variables you’ve put it between, which VB may or may not decide to cast into strings depending on an arcane set of conditions that nobody understands or remembers. So the solution was right there all along, i.e. just make & the only concatenator and reserve + for math only. But that would be too much like right.

      • SpaceNoodle@lemmy.world
        link
        fedilink
        arrow-up
        4
        ·
        edit-2
        1 day ago

        There’s nothing wrong with overloading an operator for other classes; the problem is the unexpected typecasting.

        Python, for example, will allow you to “add” strings to concatenate, but will throw a type error if you attempt to add a string to an integer.

      • Phoenixz@lemmy.ca
        link
        fedilink
        arrow-up
        1
        ·
        19 hours ago

        PHP uses . which works perfectly fine, I’ve never encountered this nonsense before

        • dual_sport_dork 🐧🗡️@lemmy.world
          link
          fedilink
          English
          arrow-up
          1
          ·
          19 hours ago

          Yes, and PHP can even implicitly (or explicitly!) cast variables between different types. Dot (.) is for strings and + is for math. It’s one of the few things about PHP that makes sense.