5 ms·
Named arguments are great but should be used with care as they also create a reverse dependency. It prevents you from ever renaming the arguments in the future.
by ndotl 6y ago
Named arguments are great but should be used with care as they also create a reverse dependency. It prevents you from ever renaming the arguments in the future.
- saagarjha 6y agoJust like you can't ever rename the function in the future?
- paublyrne 6y agoIn the case of a library that would make this a breaking change you could add the new key rather than changing it, and support both while flagging old key usage with a deprecation warning.
- fsloth 6y agoWhy would it? When you change the name of nth argument from foo to bar, compile will fail and then you just need to do a global rename. Is there any scenario where this would not be feasible?
- wool_gather 6y agoThe caller can't do a global rename if they don't own the source of the function -- because it's in a library. Which is what parent meant by "reverse dependency": the library's interface is constrained by the fact that it has users.
- DagAgren 6y agoBut this is already the case for the name of the function. Semantically, named arguments are just part of the name of the function.
- fsloth 6y agoSurely if the library interface changes the users can change their own code? That's why we have versioning of libraries - so that users of the library can take intelligently new versions into use, and especially so they are aware if (and when) the interface changes.
- wool_gather 6y agoAccompanying saagarjha's point, you can freely rename the internal argument names, just not the external labels. Which is basically the same as changing the argument names in say C.
- dep_b 6y agoYou can mark it as deprecated with a reference to the replacing function. As long as the argument types match you can automatically refactor
- DagAgren 6y agoThis is already the case with the name of your function. And named arguments are basically just an extension of the name of your function.