2012/03/26

メソッドの定義と実行:Objective-C

Objective-Cの特徴としてメソッドの定義方法と呼び出し方法がある。 メソッドの持つ引数の数によっても形が変わってくるので慣れが必要。戻り値の有無、引数の数によっていくつか例を挙げながら確認してみる。

※下記コード内の test は各クラスのインスタンスを表す変数

1.戻り値も引数もないメソッドの場合

- (void)hogeMethod;  //メソッドを定義
{
  //処理
}

[test hogeMethod];  //メソッド呼び出し

2.戻り値があって引数がないメソッドの場合

- (NSString *)hogeMethod;  //戻り値がNSString型のメソッドを定義
{
  //処理
}

NSString *result = [test hogeMethod];

3.引数が1つあって戻り値がないメソッドの場合

- (void)hogeMethod:(NSString *)argString;  //引数がNSString型のメソッドを定義
{
  //処理
}

[test hogeMethod:@"hogehoge"];  //hogehoged文字列を引数としてメソッド呼び出し

4.引数が1つと戻り値があるメソッドの場合

- (NSString *)myMethod:(NSString *)argString;  //戻り値がNSString型、引数がNSString型のメソッドを定義
{
   //処理
}

NSString *result = [test myMethod:@"hogehoge"];

5.引数が2つと戻り値があるメソッドの場合

 - (NSString *)myMethod:(NSString *)argString   //戻り値がNSString型、引数がNSString型とint型の2つあるメソッドを定義
                           myInt:(int)argInt;
{
  //処理
}

NSString *result = [test myMethod:@"hogehoge" myInt:123]; //メソッド呼び出し
myMethod、myIntはメッセージキーワードと呼ばれ、メソッド名はメッセージキーワードをつないだものになる。 つまり、このメソッドのメソッド名は「myMethod:myInt:」となる。

もっとわかりやすくすると、、

たとえば、
- (void)setWidth:(int)argWidth
              height:(int)argHeight
               depth:(int)argDepth;
{
  //処理
}
というメソッドの場合、メソッド呼び出しは下記のようになる。
[test setWidth:5 height:6 depth:7]
この記述方法だと各引数の意味がメッセージキーワードを見ればわかるので便利。

※一般的には下記のように書くがちょっとわかりにくい。
public void setSize(int w, int h, int d)  //メソッド定義
{
  //処理
}

test.setSize(5, 6, 7);  //メソッド呼び出し

というわけで

Objective-Cでメソッドを定義するときにはメソッドを呼び出した時の記述のされ方をイメージしておくとコードが非常にわかりやすくなる、というメリットがある。

おまけ

メソッド定義の最初の「-」はインスタンスメソッドの定義の場合に付加する。 先頭の記号が「+」の場合はクラスメソッドの定義となる。 例えば、クラスの初期化手続きで利用するallocメソッドやinitメソッドなどが代表的なクラスメソッド。

0 件のコメント:

コメントを投稿