Groovy プロパティのアクセサメソッド は省略可能

「Groovy イン・アクション」を読んでる。今 33ページ だ。(全然進んでないな…)

class Book {
  private String title
  public void setTitle(String val) {
    this.title = val
  }
  public String getTitle() { 
    return this.title
  } 
}

def a = new Book()
a.setTitle('ABC')
println a.getTitle()

上のと同義なコードが、下のコード。

class Book {
  String title
}

def a = new Book()
a.title = 'ABC'
println a.title

だいぶすっきりしてる。ちなみに set、get でのアクセスも可能。

class Book {
  String title
}

def a = new Book()
a.setTitle('ABC')
println a.getTitle()

でも、set、get は使わないと思う。だって面倒だもん。
.NET と比べて、Java は プロパティのアクセスの記述が面倒だと思ってた。
アクセサの宣言部は IDE が自動生成してくれるとしても、使う時にこんなコード書くのがすっげー面倒くさくて。

book.setTitle("Title");
String title = book.getTitle();


アクセサの宣言部も省略出来るのは、コードがすっきりしていいな〜。
.NET でも 自動プロパティ(auto property)がこれに近いのかな。(C#だけかな?VB.NETには今のとこなかった。)
構文はこんなの。

public string Title { get; set; }

これで、Title っていうプロパティにアクセス出来る。フィールドっぽくみえるけど一応プロパティ扱い。
get と set には、別途アクセス修飾子を適用出来る。

public string Title { get; private set; }

これだと、外からは 取得しか出来ないプロパティになる。


ただ、今の自動プロパティは微妙に使いにくかったりする。
INotifyPropertyChanged インターフェイス とかを実装しようとすると自動プロパティが使えない。
INotifyPropertyChanged は、データの変更を通知する仕組みを提供するインターフェース。WPF が出てから存在を知ったんだけど、.NET Framework 2.0 のころからいた模様。
WPFバインディングでデータを変更したら画面の表示も変わるみたいな機能でよく紹介されてた。
※.NET 2.0 の頃からあるので WPF じゃなくても使えました。Windows フォームの コントロールに、Binding クラス 使って、
 INotifyPropertyChanged を実装したカスタムオブジェクト をバインドさせたりしてみた。INotifyPropertyChanged を実装していないと、微妙な動きになるんだよ=。(そのうち、記事で紹介します。)


Groovy の事書いてたのになんか脱線気味。。。