Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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).

like image 574
maxedison Avatar asked Jan 18 '23 11:01

maxedison


1 Answers

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.

like image 93
BoltClock Avatar answered Jan 30 '23 21:01

BoltClock