Objective-C入門その6:メソッドの宣言と実装をマスターする

サルでき.jp > 11.サルにもできるiPhoneアプリの作り方(旧アメブロ記事) > Objective-C入門その6:メソッドの宣言と実装をマスターする

2009/09/04 09:00 投稿先 11.サルにもできるiPhoneアプリの作り方(旧アメブロ記事) 投稿者 カワサキ タカシ

ラスの宣言、インスタンス変数の宣言と来ました。宣言シリーズ第3弾はメソッドの宣言です。

今までよりすこーし複雑になりますので、まだ読んでない方はこちらを先にどうぞ。
Objective-C入門番外編:オブジェクト指向って何だろう?
Objective-C入門その4:クラス宣言をマスターする
Objective-C入門その5:インスタンス変数宣言をマスターする

ここまでのところをまとめると、

// クラスとインスタンス変数の宣言
@interface 狐:虎<ライオン>{
  数字 指;
}
@end

でしたね。
これで、
虎とライオンを連れて来た狐は何かを数えるための指を持っている。
という宣言になります。

今回のお題はメソッドです。

さて、いつものように。

メソッドってなんでしょう?

直訳すれば「方法」ですが、「方法」ではイマイチピンときませんね。

そんな時はまたマナブ君に登場してもらいましょう。

前回のインスタンス変数宣言のお話の時に、マナブ君はこんな計算をしていました。
Objective-C入門その5:インスタンス変数宣言をマスターする

int 指;  // int型の変数「指」を宣言
指 = 0;  // 指をゼロで初期化
指 += 1;  // 指に1を加える
指 += 3;  // 指に3を加える
指 += 5;  // 指に5を加える
指 -= 4;  // 指から4を引く
printf(“%dほーん!”, 指);  // 指の値を出力

さらさらと書いてしまいましたが、
マナブ君は実際はこういう状態にあります。

STEP1 指、スタンバイ
STEP2 先生が黒板に書いた数字、見る
STEP3 指、折る
STEP4 「答えは?」と聞かれたら、大きな声で答える

これは、先生がどんな数字を黒板に書こうが一緒です。

マナブ君にはこういう「一連のまとまった機能」があるのです。

そう、これがメソッドです。

算数の時間用マナブメソッドです。

侮るなかれ、このメソッド。
もう少し細かく見てみると、実はいろんな要素が入っています。

STEP1 指、スタンバイ

これは前回お話しした、インスタンス変数の宣言です。
指、というデータ一時保管領域を今まさに彼は用意したわけです。

STEP2 先生が黒板に書いた数字、見る

これは、引数の受け取りです。

さて、変な言葉が出てきましたね。
引数(ひきすう)と読みます。

メソッドを動かす時に、メソッドに渡すことができる値のことです。

メソッドは様々な場面で使います。
この算数の時間用マナブメソッドも、もしかしたら
お使い用おつり計算メソッドとして使うことがあるかもしれません。

そんなときに、メソッドの中に1とか3とかの数字を設定しておくと、
マナブ君はこの計算しかできなくなってしまうので、
他の計算をさせたくなったら新しいメソッドを作るしかなくなります。

数字の部分は敢えて空っぽの変数にしておいて、動かす時に都度引数で与える。

メソッドを上手に使うための方法のひとつが、引数です。

STEP3 指、折る

これはそのまんま、処理内容です。

STEP4 「答えは?」と聞かれたら、大きな声で答える

これは、戻り値です。

また来ましたよ。
戻り値(もどりち)と読みます。

注!)ここでは前回の説明文をそのまま書いているのでprintf(出力)コマンドを使っています。
printfはあくまで「コンソールに表示しろ!」という命令です。戻り値ではありません。
ややこしくてごめんなさい。

さっき引数というものが出てきましたね。
これの反対が戻り値です。

メソッドが動いた後に、メソッドから返ってくる値のことです。

マナブメソッドは「指を折って数える機能」を搭載していますので、
計算結果を「戻り値」として設定しておけば、彼の答えが返って来ます。

引数戻り値、そして変数

どんな言語でも、
コーディングし始めて最初に引っかかる言葉のオンパレードです。

ここでガッチリ覚えてしまいましょう。

言葉を覚えたところで、行ってみましょうか。

はい、どん!

HelloWorldAppDelegate.m
Objective-C入門その6:メソッドの宣言と実装をマスターする
<クリックで拡大>

でたー。
宣言(.h)じゃなくて実装(.m)の方~。

しょうがないんです。
メソッドの実装は.mの方でやるんです。

あれ?今回のタイトルって
Objective-C入門その6:メソッドの宣言と実装をマスターする
じゃなかったっけ?

ええ。そうですよ。
そうなんですけど。

私ここでこんなことを書きましたね。
Objective-C入門その4:クラス宣言をマスターする

ライオン呼んでるくだりです。

じゃぁ呼びたい放題かというと、プロトコルの場合、
メソッドの宣言だけで実装部分が無いので、「ちょい面倒」
という制限が付きます。

勘がいい人ならもうピンときてるでしょうか。

そう、
HelloWorldAppDelegateのメソッドは
全て<UIApplicationDelegate>が宣言しちまってるので宣言部分が無い!

サンプル悪ぅ!

まぁそう言っても無いものは無いので実装から見ます。
宣言は実装から {カッコ} を取っ払っただけなので、読み方は一緒です。

まず1個目、と。

- (void)applicationDidFinishLaunching:(UIApplication *)application {

な、何じゃこりゃぁ。

私の中の優作も怒る。

酷いですね。書き写すだけでも一苦労です。
帰りたいですがそうもいきませんので、そーっとバラしていきましょう。

-
(void)
applicationDidFinishLaunching
(UIApplication *)
application

こんな感じでしょうか。
ではひとつずつ。

「-」

マイナスです。引き算で使います。
これは「インスタンスメソッドですよ」ということを表しています。
インスタンスメソッドっていうのは、インスタンスになったときだけ有効なメソッドのことです。
逆は「+」で、クラスメソッドと言って、インスタンスにしなくてもクラスで使えるメソッドです。

クラスメソッドは特殊なケースで使う場合が多いみたいですので、
名前以外のことはサラッと忘れておきましょう。
海馬止めです。
今明かされる、脳の仕組みとこのブログのつながり

(void)

来ましたよ~。
これは「戻り値」です。

このカッコの中に戻ってくる値の「型」を書いておきます。

えーと、この場合の「型」は、void(ヴォイド)。
つまり、「戻り値ナシ」ってことです。

サンプル悪ぅ!

applicationDidFinishLaunching

はいコレ。
「メソッドの名前」です。

あぷりけーしょんでぃどぅふぃにっしゅろーんちんぐ長いわ!

とりあえずアプリ起動後の処理について書いてるみたいだ。と思っときましょう。

(UIApplication *)

はいコチラ。
また来ましたよ~。

これは「引数」です。

このカッコの中に渡す値の「型」を書いておきます。

この場合はUIApplication型の引数渡しますよ~って書いてます。
*はインスタンス変数宣言の時に見ましたね。
Objective-C入門その5:インスタンス変数宣言をマスターする

型がクラスオブジェクト型の場合は、
変数名の頭にアスタリスクを付ける。

コレ系です。
こうやってアスタリスクだけポーンと書くケースがObjective-Cの中では多いです。
この辺から慣れておきましょう。

application

これは「引数の名前」です。

あ、あれ?
何このカッコの切れ方。変数の宣言の時と違わね?

(UIApplication *application)
じゃないの?

じゃないんです。

(UIApplication *)application

これが正解。

今のところ上手く説明ができません。
お約束と思って覚えちゃいましょう。

では、長々となりましたけど、まとめてみましょう!
「【戻り値が無く】【UIApplication型】の【application】という名前の引数を設定した【applicationDidFinishLaunching】というメソッドですよ~」

読めましたね。
殉職せずに済みそうです。

2個目なんて超楽勝ですのでさっくり読んでみましょう。

- (void)dealloc

「【戻り値が無い】【dealloc】というメソッドですよ~」

これだけです。

今回は長くなりましたね。
特に携帯からお読みの方には「嫌がらせ的な文量」でお届けしました。

ここまで読んでいただいた方、本当におつかれさまでした!

クラス、インスタンス変数、メソッドと、
Objective-Cを通してオブジェクト指向の基本的な3概念を見て来ました。

いかがでしたか?

ものすごく複雑な処理も、結局は基本の積み重ねです。

Hello,worldを完全に読み切ったとき、
きっとびっくりするほどObjective-Cへの理解が深まっているハズです。

入門編、もうしばらくお付き合いください。

関連する記事:


Advertisement