5 つのフィールドを囲むカスタム オブジェクトを渡すという 3 番目の方法を見逃しました。
@interface HostDef // Pick a good name that fits well the purpose of your method.
@property (nonatomic, readwrite) NSString* hostName;
@property (nonatomic, readwrite) NSString* hostDomain;
@property (nonatomic, readwrite) NSString* userSubdomain;
...
@end
これは、最も説明的で拡張可能な方法です。渡されたアイテムのリストを拡張する必要がある場合はHostDef
、メソッドのシグネチャをそのままにして、 を変更します。
近い将来、パラメーターの数が 5 のままである可能性が高い場合は、5 つの個別の引数を持つメソッドも同様に優れています。具体的には、引数の数が、変化しない世界またはアルゴリズムの基本的なものに対応している場合、個別の引数を持つメソッドは適切な選択です。たとえば、メソッドがバイナリ ツリーの左サブツリーと右サブツリーを入力として受け取る場合、引数を 2 つ持つことが適切です。これは、バイナリ ツリーは、バイナリ ツリー以外のものにならなければ引数を増減できないためです。
名前のないオブジェクトの単純な配列を渡すことは、最も読みにくい選択肢であり、維持するのも最も困難です。すべてのオブジェクトがプログラムに対して同じ「意味」を持たない限り、それらを同じ配列に入れるべきではありません。たとえば、ホスト ドメインとユーザー サブドメインを同じ配列に配置すると、プログラムの読者を誤解させる簡単な方法になり、メンテナンスが大幅に複雑になります。