読者です 読者をやめる 読者になる 読者になる

Objective-Cでmethodの呼び出しに`.`を使いたくないって話

iOS

Objective-Cはメソッドに.でアクセス出来るんだけど、個人的には好きじゃないし、コード読む上でも紛らわしいから良くないと思っている。

-(id)hoge;

ってメソッドがあったら

[self hoge];

self.hoge;

の2つの方法でメソッド呼び出し出来る。

前者については、Objective-C的にはたぶん一般的な呼び出し方だと思う。 後者が良くないと思っていて、Objective-Cにはpropertyって言って、getter/setterの糖衣構文がある。

@interfate Clazz
@property id fuga;
@end

って書くと、getterとsetterが生成されて、

[self fuga];
[self setFuga:hoge];

みたいな感じでアクセス出来る。

だけどpropertyの場合は

self.fuga;
self.fuga = hoge;

みたいな感じで値をget/setするのが一般的だと思う。

そこで、メソッドに.でアクセスすると、単純なgetterなのか、メソッド呼び出しなのかが分かりにくくなる。Xcodeだと、propertyもmethodも同じ色で表示されるので、見た目上の違いが全く無くなる。

それで、何が困るのかっていうと、.でアクセスしているのがマジで単純なgetterなのか、getするのに時間のかかる処理なのかが分からない。

propertyだと思って軽い気持ちでアクセスしまくってたら、中でなんか巨大な処理してたりしてても実行するまで気づかないし、もしかしたら実行しても気付かないかもしれない。

Rubyとかもmethod.で繋いで呼び出せるけど、そこら辺の判断ってどうしてるんだろうと思った。命名????

propertyの場合も、setFugaを上書きしちゃえば、中出巨大な処理が出来るんだけど、なんというか、こう、こう!!!!!!!っていう感じ。