Re: A question of style: Returning 'pairs'
Re: A question of style: Returning 'pairs'
- Subject: Re: A question of style: Returning 'pairs'
- From: Bob Smith <email@hidden>
- Date: Wed, 2 Jul 2008 13:03:26 -0700
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@hidden)
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:
This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden