さて、カプセル化でおなじみの getter, setter ですが。
Java ならこうですね。
private int _field1;
private int _field2;
private int _field3;
public int getField1() {
return _field1;
}
public void setField1(int field1) {
_field1 = field1;
}
public int getField2() {
return _field2;
}
public void setField2(int field2) {
_field2 = field2;
}
public int getField3() {
return _field3
}
public void setField3(int field3) {
_field3 = field3;
}
C#ならこう。
private int _field1;
private int _field2;
private int _field3;
public int Field1 {
get { return _field1; }
set { _field1 = value; }
}
public int Field2 {
get { return _field2; }
set { _field2 = value; }
}
public int Field3 {
get { return _field3; }
set { _field3 = value; }
}
Ruby なら、同様に書くとこうなるようです。
def field1
return @field1
end
def field1=(new_field1)
@field1 = new_field1
end
def field2
return @field2
end
def field2=(new_field2)
@field2 = new_field2
end
def field3
return @field3
end
def field3=(new_field3)
@field3 = new_field3
end
これで field1 という属性(Ruby では属性と呼ぶらしい)に対して、値の取得も設定もできます。
使い方は C# のプロパティと同じ使い方ですが、定義は getter と setter の二種類必要なので、C# と Java の中間のイメージ。
ところが Ruby では上記の例のようなシンプルな属性の場合、こちらで OK。
attr_accessor :field1, :field2, :field3
また、下記でもOK。
attr_reader :field1, :field2, :field3
attr_writer :field1, :field2, :field3
attr_writer の後を調整すれば読み取り専用属性も可能。
さすが後発。これは楽だ。