Objective-Cってメソッド名をそんなに重要視しないのでしょうか・・・?
今日までは取り合えずモチベーションを上げる為にiPhoneで何が作れるのかと言うのをやってきましたが、そろそろ基礎もやっておかねば。と言う事で今日はObjective-Cのシンタックスなんかを勉強しようと思います。
と言うのも一昨昨日に作ったジャンケンアプリで、纏めて.hiddenの状態を変化させる為にメソッドを作ろうとしたら何故かコール出来なかったと言うのが非常に悔しかったのです。
その時作ったメソッドが以下:
- (void) ButtonHiddenStatus : (BOOL) paperHidden : (BOOL) scissorHidden : (BOOL) rockHidden : (BOOL) againHidden { paperButton.hidden = paperHidden; scissorButton.hidden = scissorHidden; rockButton.hidden = rockHidden; againButton.hidden = againHidden; }
でメソッド実行で ButtonHiddenStatus(true, true, false, true) とかやってたんですけどまぁ当然の事ながらエラーなわけです。
お恥ずかしい。
[self ButtonHiddenStatus:true :true :true :true];
が正しい用法なのです。
で、ただ恥を晒すだけなのもなんなので自分的に面白いと思った事などを。
Objective-Cのメソッド定義の構文は、メッセージ式の記述が明解になるように考えられています。自分でメソッドを定義するときにも、メッセージ式でどのように表現されるかをイメージしながらネーミングするといいかもしれません。
Objective-Cのクラス定義を理解しよう (2/3):Cocoaの素、Objective-Cを知ろう(3) - @IT
なるほど私のメソッドは開発者の意図から少々離れていた模様です。
本当ならば実装は
- (void) patternHidden:(BOOL)paraPaperHidden scissorHidden:(BOOL)paraScissorHidden rockHidden:(BOOL)paraRockHidden againHidden:(BOOL)paraAgainHidden { paperButton.hidden = paraPaperHidden; scissorButton.hidden = paraScissorHidden; rockButton.hidden = paraRockHidden; againButton.hidden = paraAgainHidden; }
で、実行は
[self patternHidden:true scissorHidden:true rockHidden:true againHidden:true];
が正しいと言えるのでしょう。
なんだかPropertyでも設定している感覚ですね。
この構文はなるほどメソッド実行時にかなり分かりやすくなるであろう事は明確です。
Intellisenseのまともに働かない環境下では非常に分かりやすいコードにもなるでしょう。
ただ、
- (void)ButtonHiddenStatus patternHidden:(BOOL)paraPaperHidden scissorHidden:(BOOL)paraScissorHidden rockHidden:(BOOL)paraRockHidden againHidden:(BOOL)paraAgainHidden
と矢張り一番最初にはメソッド名を入れたくなってしまうのは他の言語から来た皆様も通った道なのでしょうか・・・