次にメソッドの名前があります。前回セレクタと紹介したものです。今回のセレクタは「calcBmi:height:」となっています。
前回より少し長いですね。それぞれの「:」の後ろについている「(double)weight」「(double)height」は
仮引数とその型となっています。仮引数とはメソッド定義の際に、センダーから渡される値を格納しておく変数を定義しておく
ものです。このとき引数を省略できるようですが、その場合はid型となってしまいます。明示的に指定するほうが推奨のようです。
またセレクタに複数のキーワードがついてます。C言語などでも宣言時に仮引数の型と変数を指定しますが、
それぞれの変数にキーワードはつきません。
しかしObjective-Cの場合はキーワードが付きます。たとえば、height変数の前に「height:」というキーワードがついていますね。
これにより、それぞれの引数がどういったものなのかを表すことができます。
メッセージ送信の際にキーワードの後ろに実引数をつけることで、どの項目に値を送っているのかがわかりやすくなっています。
11行目をみてください。
[calcBmi:55.0 height:1.72]
C言語ならば以下のようになります。
calcBmi(55.0,1.72)
今回の場合、体重と身長を指定するのですが、Objective-Cの場合は、二つ目に身長を指定すれば
よいことがわかりますね。これなら間違えて体重を指定することはないと思われます。
逆にC言語の書き方の場合、引数の順番をちゃんと覚えていないといけません。
こういうメリットを生かすためにキーワードも意味のある単語にしとくべきなんでしょうね。
デメリットは長くなることでしょうか。
実装のファイルでは「@implementation」ディレクティブを使用して処理の実装を行います。
実装部分の処理は単なる計算をしているだけですので、特に述べることはありませんが、
実装する際に気を付けることとして宣言した通りの構成で実装しなければなりません。
例えば実装部分の「-」を「+」に変えたり、戻り値の型を(int)にすると宣言とずれているということで
コンパイル時に警告がでました。
上の警告は「-」を「+」に変えました。
下の警告は戻り値の型を(int)にしました。
戻り値がある場合、センダーに値を返す必要があるので「return」文を使用して返します。
今回のまとめとしては
- メソッドを定義するときは戻り値と仮引数の型と変数名をつけるときがある
- インスタンスメソッドとして定義した場合はインスタンス化しなければ使用できない
- メソッドにはキーワードがつき、そのキーワードにより呼び出す際にどういう項目なのかを知ることができる
- 定義したメソッドの構成(引数 戻り値の型 セレクタ名)と同じ実装をしなければならない
といったとことでしょうか。
TechProjin 開発系基礎講座 連載リンク
基礎からPHPWEBアプリ解発を学ぶなら・・
PHP基礎 連載
AIなどで注目急上昇!これから学ぶならPython!!
独学で学ぶ-pythonプログラミング 連載
汎用性◎ 定番プログラミング言語JAVA
Java基礎講座 連載