▲ | LexiMax 5 days ago | |||||||||||||||||||||||||||||||
I will die on the hill that string concatenation should have its own operator, and overloading + for the operation is a mistake. Languages that get it right: SQL, Lua, ML, Perl, PHP, Visual Basic. | ||||||||||||||||||||||||||||||||
▲ | o11c 5 days ago | parent | next [-] | |||||||||||||||||||||||||||||||
I think it's fine when the language has sufficiently strict types for string concatenation. Unfortunately, many languages allow `string + int`, which is quite problematic. Java is to blame for some of this. And C++ is even worse since literals are `const char[]` which decays to pointer. Languages okay by my standard but not yours include: Python, Ruby. | ||||||||||||||||||||||||||||||||
▲ | zevets 5 days ago | parent | prev | next [-] | |||||||||||||||||||||||||||||||
Alternatively, any implementation of operator+ should have a notional identity element, an inverse element and be commutative. | ||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||
▲ | 112233 5 days ago | parent | prev | next [-] | |||||||||||||||||||||||||||||||
Tangential, but Lua is the most write-only language I have had pleasure working with. The implementation and language design are 12 out of 10, top class. But once you need to read someone else's code, and they use overloads liberally to implement MCP and OODB and stuff, all in one codebase, and you have no idea if "." will index table, launch Voyager, or dump core, because everything is dispatched at runtime, it's panic followed by ennui. | ||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||
▲ | Animats 5 days ago | parent | prev | next [-] | |||||||||||||||||||||||||||||||
> string concatenation should have its own operator, It does: | That character was put in ASCII specifically for concatenation in PL/1. Then came C. | ||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||
▲ | account42 5 days ago | parent | prev | next [-] | |||||||||||||||||||||||||||||||
Those languages need a dedicated operator because they are loosely typed which would make it ambiguous like + in JavaScript. But C++ doesn't have that problem. Sure, a separate operator would have been cleaner (but | is already used for bitwise or) but I have never seen any bug that resulted from it and have never felt it to be an issue when writing code myself. | ||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||
▲ | dgb23 5 days ago | parent | prev | next [-] | |||||||||||||||||||||||||||||||
PHP overloads operators in other ways though. | ||||||||||||||||||||||||||||||||
▲ | CyberDildonics 4 days ago | parent | prev | next [-] | |||||||||||||||||||||||||||||||
But why, where does it become a problem? | ||||||||||||||||||||||||||||||||
▲ | paulddraper 5 days ago | parent | prev [-] | |||||||||||||||||||||||||||||||
This is so sad obvious it’s painful. Arithmetic addition and sequence concatenation are very very different. —— Scala got this right as well (except strings, Java holdover) Concatenation is ++ | ||||||||||||||||||||||||||||||||
|