That makes sense. Thanks for the reply, Ryan!
Frode On Tuesday, February 17, 2015 at 11:55:52 PM UTC+2, Ryan Graham wrote: > > Ideally the "shape" of your return values shouldn't change based on > arguments. I think the application of this return shape principle is > pretty clearly pointing at using 3 different functions, but it's possible > the real code is more nuanced than that. > > ~Ryan > > On Tue Feb 17 2015 at 11:54:22 AM Mad Frode <[email protected] > <javascript:>> wrote: > >> Hi! >> >> I have a module, a simple function that takes two parameters. If only one >> parameter is given, it returns an array as the result and all is fine. >> >> If two paramenters is given an array is also the main result. But for >> some edge cases, it returns another array with some additional data. >> >> If it was not for the edge (rare) cases that requires an additional array >> of data, I would have just returned an array, so the user would use my >> module like this: >> >> var coolModule = require('cool-module'); >> var resultArray1 = coolModule('parameter1'); >> var resultArray2 = coolModule('parameter1', 'parameter2'); >> >> But since I have some edge cases that requires an additional array, how >> should I best return data? I see the following alternatives: >> >> // Returned data is object: >> var resultArray1 = coolModule('parameter1').resultArray; >> var resultArray2 = coolModule('parameter1', 'parameter2').resultArray; >> var resultArray3 = coolModule('parameter1', >> 'parameter2').resultEdgeCasesArray; >> >> // Return data as array when only one paramenter, return data as object >> if two properties: >> var resultArray1 = coolModule('parameter1'); >> var resultArray2 = coolModule('parameter1', 'parameter2').resultArray; >> var resultArray3 = coolModule('parameter1', >> 'parameter2').resultEdgeCasesArray; >> >> // Use 3 different methods: >> var resultArray1 = coolModule.oneParameterMethod('parameter1'); >> var resultArray2 = coolModule.twoParameterMethod('parameter1', >> 'parameter2'); >> var resultArray3 = coolModule.edgeCasesMethod('parameter1', 'parameter2'); >> >> // Use an array, and for the edgecase have a special method. But then I >> would need to create an additional method name for the standard cases: >> var resultArray1 = coolModule.standardMethod('parameter1'); >> var resultArray2 = coolModule.standardMethod('parameter1', 'parameter2'); >> var resultArray3 = coolModule.edgeCasesMethod('parameter1', 'parameter2'); >> >> // Use array in all cases, but for the second add the edge cases result >> as a property on the array: >> var resultArray1 = coolModule('parameter1'); >> var resultArray2 = coolModule('parameter1', 'parameter2'); >> var resultArray3 = coolModule('parameter1', >> 'parameter2').resultEdgeCasesArray; >> >> I would have preferred the last one, since in 99% of the cases the users >> of the module would just be interested in one array. But since this would >> limit the users way of working with the array (the user could not use >> for...in to traverse the array, but would use a normal for-loop), then I >> guess this is a bad option. >> >> Which would you choose, or maybe there is a better (simplest/most >> logical/most used) approach? >> >> Thanks you in advance for any thoughs! >> >> Frode >> >> -- >> 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] <javascript:>. >> To post to this group, send email to [email protected] >> <javascript:>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/nodejs/677843b4-66a8-40ca-8e78-e34d31ec9db0%40googlegroups.com >> >> <https://groups.google.com/d/msgid/nodejs/677843b4-66a8-40ca-8e78-e34d31ec9db0%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/991fd076-ad44-408b-898d-a4e9f65104b2%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
