さて、前回はclassにメンバ変数を加えて、様々な型の数値を1まとまりとして扱えるようになりました。
今回は、メンバメソッドを使って、class自身に処理や振る舞いが出来るようにしてあげます。
メンバメソッド?
メンバメソッドとは、メンバ変数のようにそのclassの中で定義されているメソッドです。
メンバ変数を使ったり、メンバ変数を書き換えたり出来るという点以外は、メソッドの回で紹介したものと殆ど変わりません。
引数を受け取ったり、返り値を返したりすることももちろんできます。
前回の例だとこんな感じです。
RectData rData; void setup() { size(800, 800); rData = new RectData(100, 100, 50); } void draw() { rData.drawRect(); } class RectData { int x = 0; int y = 0; int size = 0; int addX = 0; int addY = 0; color fillCol = color(0, 0, 0); color borderCol = color(0, 0, 0); String name = "name"; RectData(int _x, int _y, int _size) { x = _x; y = _y; size = _size; } void drawRect() { fill(fillCol); stroke(borderCol); rect(x, y, size, size); } }
class RectDataの中に、
void drawRect() { fill(fillCol); stroke(borderCol); rect(x, y, size, size); }
が加わっています。
あえて解説するならば、これはdrawRectという名前のメソッドで、塗り色の指定をするfill、枠線の色の指定するstroke、そして四角形を描くrectメソッドを、自身のメンバ変数を使って実行しています。
そして、void draw(){ }の中で、メンバ変数を呼び出す時の同じように . を使ってインスタンスのメンバメソッドを呼び出しています。
前回はいちいちインスタンスであるrDataにアクセスしてメンバ変数を呼び出してから、それを使ってdraw(){ }の中で四角形を描いていたので、それに比べればかなり楽になりました。
ゲッタとセッタ
ところで、前回説明した通り、メンバ変数に代入されている数を変更する時、もしくは呼び出す時には
インスタンス名.メンバ変数名 = 値
int n = インスタンス名.メンバ変数名
のようにすればもちろん、書き換えたり呼び出したりすることが出来ますが、これはあまり推奨されていません。
ではどうするか、というと
void getX(){ return x; }
や、
void setX(int _x){ x = _x; }
のように、ただ対象のメンバ変数の値を代入する、もしくはリターンするだけのメソッドを定義して利用します。
理由は沢山あって、後からデータ構造を変えたくなった時、ポリモルフィズムを使いたくなった時、そのデータを代入していいかどうかのチェックをしたくなった時…など枚挙にいとまがない感じですが、今説明するとかなり長くなってしまうので、とりあえず「そういうもの」という風に覚えてください! =)
習慣づけておくことで、今後のプログラミングがかなり楽になります。
まとめ
メンバメソッド、ちょっと早足でしたがご理解いただけましたでしょうか?
次回は、classの継承についてです。