2012年3月13日火曜日

Dartにおけるゲッター(get)とセッター(set)

このエントリーをはてなブックマークに追加
Dartではクラスのメンバーにgetとset(いわゆるゲッターとセッター)を定義することができます。ゲッターとセッターで定義されたメンバーは、あたかもメンバー変数と同じようにアクセスできますが、変数への代入だけではなく、ほかの処理を追加することもできます。

ゲッターとセッターはメソッドと同じような形で、戻り値の方の後にgetあるいはsetを付けます。 ゲッターは仮引数を持たず、適切な値を返します。セッターは適切な仮引数を1つ持ち、値は返しません。 アクセスするときには、メンバー変数へアクセスするときと同じ方法で参照できます。
class Line {
  Line(this.start, this.end);
  int start, end;
  int get length() => end - start;
  void set length(int len) {
    end = start + len;
  }
}

main() {
  Line line = new Line(1, 3);

  // ほかのメンバー変数(line.startなど)と同じ方法で参照できる。
  // 出力: (1, 3) : length=2
  print('(${line.start}, ${line.end}) : length=${line.length}');

  // メンバー変数と同じ方法で代入もできる。
  line.length = 5;

  // 出力: (1, 6) : length=5
  print('(${line.start}, ${line.end}) : length=${line.length}');
}
この例のように同じ名前のゲッターとセッターを1つのクラス内で定義することができます。しかし同じ名前のメンバー変数やメソッドを持つことはできません。
class Line1 {
  int length;
  int get length() => /* ... */; // エラー!
}

class Line2 {
  int length() { /* ... */ }
  int get length() => /* ... */ ; // エラー!
}
このような場合には、メンバー変数をプライベートにする(_lengthにする)と良いでしょう。

また、ゲッターとセッターはオーバーライドすることができません。
class Line {
  int get length() => /* ... */;
  String get length() => /* ... */; // エラー!
}
ゲッターとセッターの定義の前にstaticを付けると、静的なゲッターとセッターを定義することもできます。

こちらもどうぞ

0 件のコメント:

コメントを投稿