Skip navigation.
 
mlRe: A question of style: Returning 'pairs'
FROM : Bob Smith
DATE : Wed Jul 02 22:03:26 2008

When I find myself in the situation you describe, my first instinct is 
to re-examine the basic design to see if the code can be re-
structured.  In your case, a better approach might be to have two 
separate methods, one which just returns the string, and another which 
takes a string as argument and returns the offset.  That solves your 
immediate return-value problem, and is also a more flexible and re-
usable design.  But if the two operations are so interwined that 
separating them leads to excessive code duplication, a multi-valued 
return may be the best compromise; in that case my personal preference 
is a C struct, your option 2.

Hope this helps!

Bob S.

On Jul 2, 2008, at 11:48 AM, James Montgomerie wrote:

> 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.
> _______________________________________________
>
> Cocoa-dev mailing list (<email_removed>)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/cocoa-dev/<email_removed>
>
> This email sent to <email_removed>

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