maxedison
maxedison

Reputation: 17553

Better to allow an object type of 'id' or provide two arguments for two different types for a method?

Imagine that a method is going to add an object to either a certain NSMutableArray or NSMutableDictionary. Is it better (and why) to allow just a single argument with type id, or allow two--one for the array and one for the dictionary?

For example:

- (void)addObjectToArray:(NSMutableArray *)anArray
            orDictionary:(NSMutableDictionary *)aDictionary;

vs.

- (void)addObjectToArrayOrDictionary:(id);

If using the first option, I'd just pass nil as the parameter to whichever one I don't need (i.e. if adding to a dictionary, i'd pass nil as the array parameter).

Upvotes: 4

Views: 88

Answers (1)

BoltClock
BoltClock

Reputation: 723698

Neither — I'd implement two separate methods, one for the array and one for the dictionary:

- (void)addObjectToArray:(NSMutableArray *)anArray;
- (void)addObjectToDictionary:(NSMutableDictionary *)aDictionary;

It's much simpler, more testable and more maintainable than

  1. A method with an awkward signature, and unclear behavior depending on its arguments (e.g. what happens when the arguments are both nil or both not nil?); or

  2. A weakly-typed method that accepts any random Objective-C instance, and has to validate its type at runtime anyway.

Upvotes: 9

Related Questions