Adding assertions and sanity checks to your code is important, especially when you’re working in a loosely-typed language like JavaScript. Never assume the input parameters are correct, assert what they must be. Done correctly, they not only make your code safer, but also easier to understand.
Matthias’s co-worker… doesn’t exactly do that.
function checkPriceRangeTo(x, min, max) {
if (max == 0) {
max = valuesPriceRange.max
}
min = Math.min(min, max);
max = Math.max(min, max);
x = parseInt(x)
if (x == 0) {
x = 50000
}
//console.log(x, 'min:', min, 'max:', max);
return x >= min && x <= max
}
This code isn’t bad, per se. I knew a kid, Marcus, in middle school that wore the same green sweatshirt every day, and had a musty 19th Century science textbook that discussed phlogiston in his backpack. Over lunch, he was happy to strike up a conversation with you about the superiority of phlogiston theory over Relativity. He wasn’t bad, but he was annoying and not half as smart as he thought he was.
This code is the same. Sure, x
might not be a numeric value, so let’s parseInt
first… which might return NaN
. But we don’t check for NaN
, we check for 0. If x
is 0, then make it 50,000. Why? No idea.
The real treat, though, is the flipping of min/max. If the calling code did this wrong (min=6,max=1) then instead of swapping them, which is obviously the intent, it instead makes them both equal to the lowest of the two.
In the end, Matthias has one advantage in dealing with this pest, that I didn’t have in dealing with Marcus. He could actually make it go away. I just had to wait until the next year, when we didn’t have lunch at the same time.