3 ms·
Z performs coercion, but it's coercion rules make more sense than JavaScript's: "9" + 2 # ==> 11 "9" ++ 2 # ==> "92" Yeah, that just doesn't make thin
by stabbles 7y ago
Z performs coercion, but it's coercion rules make more sense than JavaScript's:
"9" + 2 # ==> 11
"9" ++ 2 # ==> "92"
Yeah, that just doesn't make things better
- uhryks 7y agoWhy not? It's not entirely explicit but it seems that the `++` operator is only for string concatenation, so using it with anything else that a string means it's going to be converted to string. I'm just curious about how the compiler enforces it.
- mantap 7y agoWhat is the result of "badger"+2 If + is to be defined on a string and a number then the only sensible meaning is string concatenation. All numbers can be converted to strings but most strings cannot be converted to numbers. There is a good reason to not define it because it is not associative: in JavaScript 2+2+"x" != 2+(2+"x")
- judofyr 7y ago> What is the result of "badger"+2 The same result as `convert_to_number("badger") + convert_to_number(2)`. In Z it seems that converting an invalid string to number yields NaN, so "badger" + 2 returns NaN. > There is a good reason to not define it because it is not associative: in JavaScript 2+2+"x" != 2+(2+"x") The problem with + not being associative in JavaScript is because it's actually two different operators: String concatenation and number addition. Z doesn't have this problem because + is only number addition. Personally I prefer strong typing (and thus `string + number` throwing an error and/or being a compile-time error), but it seems like the way Z does coercing is very sensible and doesn't have the same issues as JavaScript.
- zbentley 7y agoI agree. I kind of hate to say this, but Perl (5) got this right by having an explicit concatentation operator for strings (given how common they are in many programming tasks), and then a separate addition operator.
- claudiawerner 7y agoCorrect me if I'm wrong, but PHP also has the same with the . notation, though perhaps because it was inspired by Perl.
- knubie 7y agoThis seems to be the case for Z, too, doesn't it?
- paulddraper 7y agoIt makes things better. ++ is for concatenation. + is for arithmetic. Coercion or not, it's always puzzled me when languages used the same symbol. I guess they're both associative and have identity values, but that's about it. One is commutative, the other is not. * makes about as much sense for concatenation as +.