Objective-C メッセージ式の戻り値とキーワード 【初級編 第4回】
さて前回は処理の呼び出す方法の基本についてでした。
それぞれの処理である「alloc」「free」などについては後にもう少し細かく説明するとして、今回は前回のコードとは違うものを使って、メソッドの定義について書いていこうと思います。
BMIを計算してくれるアプリを作ろう!
現在、弊社ではちょっとしたダイエットブームが来てます。
そこでBMIを計算するプログラムを書くことにしました。(といってもたいしたもんではありません。)
第2回で述べたように今回はヘッダーファイルと実装のファイルを分けます。
ヘッダーファイル
Bmi.h
#import <objc/Object.h> @interface Bmi:Object -(double)calcBmi:(double)weight height:(double)height; @end
実装本体
#import "Bmi.h" @implementation Bmi -(double)calcBmi:(double)weight height:(double)height{ return weight/(height*height); } @end int main(){ id myobj = [Bmi alloc]; printf("%2.1fn",[myobj calcBmi:55.0 height:1.72]); [myobj free]; return 0; }
ソースコード内に数値がそのまま指定されているため、使い勝手が非常に悪いですが後にいろいろ直すことにしましょう。
それではヘッダーファイルから見ていきます。
最初の行のヘッダーファイルのインポートを行っています。
次に@intefaceディレクティブを使用して、Objectクラスを継承したBmiというクラスを定義しています。
この辺りは過去に出てきたソースと何ら変わりありません。
次に4行目でメソッドの定義を行っています。
頭についている「-」は第3回でも書きましたが、インスタンスメソッドを表しています。
クラスというのはあくまでそのオブジェクトにどんな属性があり、どんなふるまいをするかを定義した
設計図のようなものです。実際に値を格納したりするにはメモリ上にその領域を確保しないといけません。
その実体をつくることをインスタンス化もしくはオブジェクト化といいます。前回さらっとメモリを確保していますと
書いた「alloc」で、このインスタンス化を行っています。「alloc」以外にもインスタンス化の方法はありますが
それは後々紹介するとして、いずれの方法にしろインスタンスメソッドはそれを行わないと使用できません。
実際のメソッドの定義のところですが、前回とはやや形が異なっています。
頭の部分に「(double)」というのがついています。これは戻り値もしくは返り値と呼ばれるもの型になります。
ここでは戻り値の方を使わせてもらうことにします。
何かメソッドに処理させたときに結果をセンダーに返したい場合があります。このときにセンダーに返される
値が戻り値となります。
前回のコードは、呼び出されたメソッド内で処理が完結していた(表示させるだけでした)ため戻り値は無しでした。
その場合はなしということで「(void)」を指定します。
しかし今回は計算結果を返すようにしています。その場合はどんなデータが戻ってくるのかを示すために
戻り値の型を指定が必要です。今回は計算結果ですね。小数を表す「double型」にしています。
TechProjin 開発系基礎講座 連載リンク
基礎からPHPWEBアプリ解発を学ぶなら・・
PHP基礎 連載
AIなどで注目急上昇!これから学ぶならPython!!
独学で学ぶ-pythonプログラミング 連載
汎用性◎ 定番プログラミング言語JAVA
Java基礎講座 連載