Should you always pass the bare minimum data needed into a function
- by Anders Holmström
Let's say I have a function IsAdmin that checks whether a user is an admin. Let's also say that the admin checking is done by matching user id, name and password against some sort of rule (not important).
In my head there are then two possible function signatures for this:
public bool IsAdmin(User user);
public bool IsAdmin(int id, string name, string password);
I most often go for the second type of signature, thinking that:
The function signature gives the reader a lot more info
The logic contained inside the function doesn't have to know about the User class
It usually results in slightly less code inside the function
However I sometimes question this approach, and also realize that at some point it would become unwieldy. If for example a function would map between ten different object fields into a resulting bool I would obviously send in the entire object. But apart from a stark example like that I can't see a reason to pass in the actual object.
I would appreciate any arguments for either style, as well as any general observations you might offer.
I program in both object oriented and functional styles, so the question should be seen as regarding any and all idioms.