Skip navigation.
 
mlA question of style: Returning 'pairs'
FROM : James Montgomerie
DATE : Wed Jul 02 20:48:02 2008

Say I have a method that needs to return two equally important values 
(in my case, a string and an offset into it).  I am overthinking how 
to do it, and I though it would be interesting to see what others have 
done.

I see these opportunities (my use of 'object' and 'value' is blurred 
below, since I'm thinking of the abstract case - assume that both 
values could be objects):

1) Just return the first value, and have the caller supply an argument 
that the second value gets written into (akin to how NSError is 
customarily used).  This seems a bit unclean, since one value is not 
more important than the other, and both are necessarily returned.
2) Define a custom C struct (like NSRect, but with e.g. 'string' and 
'offset' members) and return objects in it.  Just like any other 
returned objects, the caller would be expected to retain them 
individually if it needed to keep them around.
3) Define a custom Obj-C class with two properties [e.g. 'string' and 
'offset'] and return an object of that class (with properties 
appropriately set).
4) Create a 'Pair' C struct with two ids in it.  Use it like the 
custom struct in (2).  This struct is more reusable than the one in 
(2), so this solution seems less 'heavyweight', but it is less 
descriptive.
5) Define a 'Pair' Obj-C class with 'first' and 'second' properties, 
use as (3).  Again, more reusable, less 'heavy' seeming than (3), but 
less descriptive.
6) Return an NSArray with two items in it (this seems the least 
descriptive option, from the point of view of someone reading the 
header).
7) Return an NSDictionary with two items in it, keyed by their 
property names.  This seems a bit wasteful, since the dynamicisim of a 
dictionary is not required, and is also not so descriptive from a 
header-reading perspective.

Oh, and there's also 8) Rename the file .mm, and use a C++ 
std::pair<id, id> class. (Only joking :-)

How would you do this?  Are there other, better options?

Jamie.

Related mailsAuthorDate
mlA question of style: Returning 'pairs' James Montgomerie Jul 2, 20:48
mlRE: A question of style: Returning 'pairs' Abernathy, Joshua Jul 2, 20:56
mlRe: A question of style: Returning 'pairs' Stephen J. Butler Jul 2, 20:58
mlRe: A question of style: Returning 'pairs' Jean-Daniel Dupas Jul 2, 21:14
mlRe: A question of style: Returning 'pairs' Andy Lee Jul 2, 21:22
mlRe: A question of style: Returning 'pairs' Andy Lee Jul 2, 21:30
mlRe: A question of style: Returning 'pairs' Joel Norvell Jul 2, 21:33
mlRe: A question of style: Returning 'pairs' Bob Smith Jul 2, 22:03
mlRe: A question of style: Returning 'pairs' Keith Duncan Jul 2, 22:19
mlRe: A question of style: Returning 'pairs' David Casseres Jul 4, 04:02