I like the idea. Have you used it in anger yet? How did it feel in a bigger code base? Did it get in the way or hinder your dev?
We're having the same debate on a new app we're developing and we can't settle on an answer. Looking forward to more perspective on this... Adrian On 5 October 2014 18:25, Eyal Arubas <[email protected]> wrote: > I'm wondering what are some common ways to approach the problem of > figuring out which arguments the user has passed to a function. > > It's a problem I've encountered many times when writing libraries with > APIs; especially for functions with optional arguments. > Each such function requires logic to figure out which of the arguments > were supplied, and assign default values to those which weren't. > A function with just a few arguments requires a large chunk of code just > for this purpose. > > An alternative approach is to use an `options` object, the fields of which > represent the arguments, and directly assigned by the user. > This, however, imo, is less suitable for public APIs. I prefer to have > function signatures with distinct arguments. > > It seemed to me like there should be a programmatic solution to this. Each > function's arguments should hold certain conditions. Arguments must be of > certain types, some are optionals, some have default values, etc. > This led me to develop a module which allows to declare the properties of > the function's arguments. The module resolves tnd disambiguates the > arguments passed by the user based on those declarations. > > https://github.com/EyalAr/Decree > > Decree works by analyzing a list of argument declarations. It then figures > out all the possible combinations. > For example, a function which receives two arguments, with the first one > optional, has two possible combinations - the user can call the function > with one argument (thus omitting the first one), or with two (thus > providing the first one). > A function with two arguments, of which non is optional, has only one > combination. > When the user calls the function, decree will match the supplied arguments > to a certain combination. If no combination is found, the user supplied > invalid arguments. If more than one combination is found, the user was not > specific enough, and there is ambiguity. Decree can tell where is the > problem. > > How do you usually approach this problem? > And what do you think about this solution? > > -- > Job board: http://jobs.nodejs.org/ > New group rules: > https://gist.github.com/othiym23/9886289#file-moderation-policy-md > Old group rules: > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > --- > You received this message because you are subscribed to the Google Groups > "nodejs" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/nodejs/714e2782-1b8b-4203-bcef-36761b65d993%40googlegroups.com > <https://groups.google.com/d/msgid/nodejs/714e2782-1b8b-4203-bcef-36761b65d993%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- Job board: http://jobs.nodejs.org/ New group rules: https://gist.github.com/othiym23/9886289#file-moderation-policy-md Old group rules: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines --- You received this message because you are subscribed to the Google Groups "nodejs" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/nodejs/CAH368SQBm9SFJEDutQSZMkXTLkzBn%3DvtJXTCvK8q0kOZOm7yBg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
