セレクタ形式のAppleScriptメソッドをコピペしていた時に偶然発見したのですが、Objective-Cは引数型や戻り値型の省略ができるみたいです。
前回の無名メソッドに引き続き、またまた面白い仕様ですね。
- (int)sum:a b:b {
return [a intValue] + [b intValue];
}
- split:str sep:sep {
return [str componentsSeparatedByString:sep];
}
int sum = [self sum:@2 bar:@3]; // 5
NSArray *ary = [self split:@"abc,def" sep:@","]; // ["abc", "def"]
どうやら型名を省略すると暗黙的にid
型として認識されるようです。そのためint
型等の基本型の場合は省略は出来ません(そもそもid型の実体は構造体)。
見た目は奇抜ですが、使用上の問題は特にありません。強いて挙げるなら万能型を使用しているため型チェックが緩くなることでしょうか。無理して使うべき機能ではないと思います。ダークサイ度は「★1」とします。
総集編
ここでこれまでの「ダークサイドObjective-C」シリーズの集大成として、今まで紹介してきた様々なバッドノウハウを詰め込んだサンプルコードを作成してみました。プリントアウトして壁に飾ると良いと思います。
@interface Yoda : NSObject @end @implementation Yoda
- :obj :sel {
return [obj performSelector:NSSelectorFromString(sel)];
}
+(void)load {
id x = Yoda.new;
NSLog(@"%@", [x:x:@"description"]); // <Yoda: 0x100401c70>
}
@end
私「僕の知ってるObjCタンはもういないんだ。いくら呼んでも帰っては来ないんだ」
Objective-C(また始まった・・・)