With your design, every time someone wants an average of a set of numbers, you’re reimplementing the actual logic. Then if someone forgets the +1 and writes:
quotient_reduce(sum, lambda x,y: x, numbers)
A bug is introduced that’s hard to spot in a review, won’t give an error, and is hard to write tests for. Turning the lambda to an enum meant to be passed around would solve a some of the accidental bugs, but keeps the interaction with the function more complicated.
I really just don’t understand why you wouldn’t just write each efficient implementation as it’s own function and call it directly.
Okay, I do think this makes you sound crazy.
I’m putting my question first before I rant about this cause I think I got way more into this response than is warranted.
What problem does this design of just creating bespoke functions have that your design solves?
def mean(numbers): return efficient calculation def normalization(numbers): return efficient calculation def geometric_mean(numbers): return efficient calculationRant starts here:
With your design, every time someone wants an average of a set of numbers, you’re reimplementing the actual logic. Then if someone forgets the +1 and writes:
quotient_reduce(sum, lambda x,y: x, numbers)A bug is introduced that’s hard to spot in a review, won’t give an error, and is hard to write tests for. Turning the lambda to an enum meant to be passed around would solve a some of the accidental bugs, but keeps the interaction with the function more complicated.
I really just don’t understand why you wouldn’t just write each efficient implementation as it’s own function and call it directly.