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].
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/677843b4-66a8-40ca-8e78-e34d31ec9db0%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to