JavaScript
-
Especially that + and - act differently. If + does string concattenation, - should also do some string action or throw an error in this situation.
That's the case in many languages, pretty much in all that don't have a separate string concatenation operator.
-
Which "1" did it remove? And did it search the string to find a "1" to remove, or did it remove whichever character happened to be at array index 1?
It should just randomly pick any "1". Add a bit of spice, you know
-
Scanned the article: neither mission, nor purpose, nor type coercion unga-bunga explained. Or was I expected to see the greatness of the language and be humbled by its glory and might?
Well then, rage against the machine for the next 30 years and see if they kill it in favor of a nice, strict language that everybody loves. Maybe you could suggest one here for consideration.
-
Given it's JavaScript, which was expressly designed to carry on regardless, I could see an argument for it returning NaN, (or silently doing what Perl does, like I mention in a different comment) but then there'd have to be an entirely different way of concatenating strings.
Why would you need an entirely different way of concatenating strings? "11" + 1 -> exception. "11" + to_string(1) = "111"
-
Now that you mention it, it is a bit funny how Lemmy is hating LLMs as a code generation tool while also hating on the interpreter for their own hand typed code not running.
I mean, in both cases it's because the LLM and interpreter do things you wouldn't expect.
-
This post did not contain any content.wrote on last edited by [email protected]
This is my favorite language: GHC Haskell
GHC Haskell:
GHCi> length (2, "foo") 1
-
Especially that + and - act differently. If + does string concattenation, - should also do some string action or throw an error in this situation.
- should also do some string action
Like what kind of string action?
"Hello" + " world" is what everyone can understand. Switch with "-" and it becomes pointless.
-
This is my favorite language: GHC Haskell
GHC Haskell:
GHCi> length (2, "foo") 1
Wait, now I need to know why.
* some time later *
I went to check why the hell this happened. It looks like the pair ("
(,)
") is defined as an instance ofFoldable
, for some reason, which is the class used by functions likefoldl()
andfoldr()
. Meanwhile, triples and other tuples of higher order (such as triples, quadruples, ...) are not instances ofFoldable
.The weirdest part is that, if you try to use a pair as a
Foldable
, you only get the second value, for some reason... Here is an example.ghci> foldl (\acc x -> x:acc) [] (1,2) [2]
This makes it so that the returned length is 1.
-
BS. A language shouldn't have operators that allow non sensical operations like string concatenation when one operand is not a string.
It's not nonsensical, implicit type coercion is a feature of JavaScript, it's perfectly logical and predictable.
JavaScript is a filthy beast, it's not the right tool for every job, but it's not nonsensical.
When you follow a string with a
+
, it concatenates it with the next value (converted to string if needed). This makes sense, and it's a very standard convention in most languages.Applying arithmetic to a string would be nonsensical, which they don't do.
-
Why would you need an entirely different way of concatenating strings? "11" + 1 -> exception. "11" + to_string(1) = "111"
You're right. I've got too much Perl on the brain and forgot my roots. There is a language that does what you're talking about with the '+' operator: BASIC
Good luck getting the same thing retrofitted into JavaScript though. I can imagine a large number of websites would break or develop mysterious problems if this (mis)behaviour was fixed.
-
This post did not contain any content.
To start off... Using arithmetic operators on strings in combination with integers is a pure skill issue. Let's disregard this.
If you were to use + where one part is a string, it's natural to assume a string appending is desired since + is commonly used as a function for this. On the other hand, - is never used for any string operation. Therefore, it's safe to assume that it relates to actual artihmetics and any strings should therefore be converted to numerical values.
This is an issue with untyped languages. If you don't like it, use typescript. End of story.
-
This has got to be baNaNa
wrote on last edited by [email protected]That is absolutely
(n > 1) * ("ba" + 0/0 + "a")
-
expressly designed to carry on regardless
I'm surprised they didn't borrow
On Error Resume Next
from Visual Basic. Which was wrongly considered to be the worst thing in Visual Basic - when the real worst thing wasOn Error Resume
.On Error Resume Next
at least moved on to the next line of code when an error occurred;On Error Resume
just executed the error-generating line again ... and again ... and again ... and again ... -
To start off... Using arithmetic operators on strings in combination with integers is a pure skill issue. Let's disregard this.
If you were to use + where one part is a string, it's natural to assume a string appending is desired since + is commonly used as a function for this. On the other hand, - is never used for any string operation. Therefore, it's safe to assume that it relates to actual artihmetics and any strings should therefore be converted to numerical values.
This is an issue with untyped languages. If you don't like it, use typescript. End of story.
Instead of trying to make it work, javascript could just say "error." Being untyped doesn't mean you can't have error messages.
-
Instead of trying to make it work, javascript could just say "error." Being untyped doesn't mean you can't have error messages.
This is fair enough from an idealistic view. In practice, you don't want your entire website to shit itself because of a potentially insignificant error.
-
Wait, now I need to know why.
* some time later *
I went to check why the hell this happened. It looks like the pair ("
(,)
") is defined as an instance ofFoldable
, for some reason, which is the class used by functions likefoldl()
andfoldr()
. Meanwhile, triples and other tuples of higher order (such as triples, quadruples, ...) are not instances ofFoldable
.The weirdest part is that, if you try to use a pair as a
Foldable
, you only get the second value, for some reason... Here is an example.ghci> foldl (\acc x -> x:acc) [] (1,2) [2]
This makes it so that the returned length is 1.
Oddly enough, in Haskell (as defined by the report), length is monomorphic, so it just doesn't work on tuples (type error).
Due to the way kinds (types of types) work in Haskell, Foldable instances can only operate over (i.e. length only counts) elements of the last/final type argument. So, for (,) it only counts the second part, which is always there exactly once. If you provided a Foldable for (,,,) it would also have length of 1.
-
This post did not contain any content.
Heck, I need to learn some new languages apparently. Here I was expecting an angry "CS0029 cannot implicitly convert type 'string' to 'int'!
-
- should also do some string action
Like what kind of string action?
"Hello" + " world" is what everyone can understand. Switch with "-" and it becomes pointless.
this the “or throw an error”
-
Hm, playing devil's advocate, I think it is because the minus has not been defined as a string operation (e.g. it could pop the last char), so it defaults to the mathematical operation and converts both inputs into ints.
The first is assumed to be a concat because one of the parcels is a string...
It's just doing a lot of stuff for you that it shouldn't be in first place 🤭
Yeah, this looks dumb on the surface, but you've got bigger problems if you're trying to do math with strings
-
Wait, now I need to know why.
* some time later *
I went to check why the hell this happened. It looks like the pair ("
(,)
") is defined as an instance ofFoldable
, for some reason, which is the class used by functions likefoldl()
andfoldr()
. Meanwhile, triples and other tuples of higher order (such as triples, quadruples, ...) are not instances ofFoldable
.The weirdest part is that, if you try to use a pair as a
Foldable
, you only get the second value, for some reason... Here is an example.ghci> foldl (\acc x -> x:acc) [] (1,2) [2]
This makes it so that the returned length is 1.
wrote on last edited by [email protected]I don't even know Haskell but it seems like (" ( , ) ") would be an instance of boob.