Boolean parameters are wrong
Today’s simple way to improve your code.
Say you’re reading a program and you see some lines like this:
new ArrayBlockingQueue(10, false); box.pack_start(child, false, true);
You don’t know what the booleans mean. Say you’re reading it and you see this:
new ArrayBlockingQueue(10, Policy.FAIR); box.pack_start(child, Packing.FILL);
Which is better?
There’s only one time that a boolean is OK, and that’s when the name of the method (or keyword, in a language that has keyword args) already describes it:
queue.setFair(false); box.set_expand(child, false);
Otherwise, no booleans. I know you’re too lazy to create an enum or flags type, but do it anyway.
Numeric types, for APIs where the number is expected to be a literal rather than a variable name, often have the same problem. But it’s a bit harder to solve in that case. The best solution may be for API users to use named constants.
Mystery-booleans are easy to avoid, though, so just do it.