第21回 – class 4 メンバメソッド


さて、前回は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の継承についてです。