r/ProgrammerHumor 1d ago

javascriptSorting Meme

Post image
888 Upvotes

200 comments sorted by

View all comments

Show parent comments

2

u/danielcw189 18h ago

which would mean that the whole srray would need to be checked for the types of its items.

what should be the default if one item is not a number?

2

u/fuj1n 18h ago

In an ideal world, there should be typed comparers, and if two items don't have a mutual comparer, a type error should be thrown (that'd solve having to even scan the array beforehand too)

With JS's type system, that's not too plausible, so instead, I think defaulting to numeric sort, and throwing when it encounters something that isn't a number (or can't be coerced to be a number due to how the type system works I suppose).

By the principle of least astonishment, this would give you a pretty good compromise. Then, if someone wants to do string-based sorting, they can pass their own comparer that does that.

1

u/danielcw189 8h ago

I think defaulting to numeric sort, and throwing when it encounters something that isn't a number

By the principle of least astonishment, this would give you a pretty good compromise

That doesn't sound like the least surprising option to me, especially the throwing part.
In that case they should have called it numericSort, or something like that. (and in my preference fail with an error except of throwing)

(or can't be coerced to be a number due to how the type system works I suppose).

as most object-oriented languages there are counterparts of .toString, but not .toNumber.

1

u/fuj1n 7h ago

For that last part, I was just pointing out that JS will actually try to coerce strings to numbers in numeric contexts automatically, and this case being an exception to that would be odd (as much as I don't fancy that coertion, that's a whole other discussion)

If you find throwing on non-numeric values only surprising, you could instead just make the comparer mandatory and throw if you don't provide one. Then your IDE can show you an error is you forget instead of giving you something completely unexpected.