プロパティ
Midoliy|F#プログラミング

プロパティの概要
サンプルでみるプロパティ

プロパティの概要


 プロパティは、オブジェクト指向プログラミングで 'has-aの関係' を表し、オブジェクトインスタンスに関連付けられているデータを指します。
 基になる値(= バッキングストア or バッキングフィールド)を明示的に指定するか、コンパイラに自動的にバッキングストアを自動的に生成してもらうかの、2種類の方法でプロパティを宣言することができます。特に前者をフルプロパティ、後者を自動実装プロパティと呼びます。自動実装プロパティに関しては、valキーワードで紹介し、この章ではフルプロパティについて紹介していきたいと思います。
 プロパティを宣言するには、memberキーワードを使用します。そして、それに続いてプロパティ名と get/set というアクセサを指定します。get/setアクセサを俗にgetter/setterとも呼ぶので覚えておくと良いでしょう。
 getter/setter の組み合わせによって、読み書き両対応・読み取り専用・書き込み専用の3種類のプロパティを作成することが可能です。読み取り専用プロパティを宣言したい場合はgetのみを、書き込み専用プロパティを宣言したい場合はsetのみを、両対応したい場合はget/set両方を定義します。フルプロパティを作成する際は、それに加えてバッキングストアを宣言しておかなければならないことにも注意が必要です。

// ------------------
// [ 構文 ]
// ------------------

// getter/setter 両対応のプロパティ宣言.
[ attributes ]
[ static ] member [accessibility-modifier] [self-identifier.]PropertyName
with [accessibility-modifier] get() =
    get-function-body
and [accessibility-modifier] set parameter =
    set-function-body

// get/set 両対応の代替プロパティ宣言.
[ attributes-for-get ]
[ static ] member [accessibility-modifier-for-get] [self-identifier.]PropertyName =
    get-function-body
[ attributes-for-set ]
[ static ] member [accessibility-modifier-for-set] [self-identifier.]PropertyName
with set parameter =
    set-function-body

// get onlyのプロパティ宣言.
[ attributes ]
[ static ] member [accessibility-modifier] [self-identifier.]PropertyName =
    get-function-body

// get onlyの代替プロパティ宣言
[ attributes ]
[ static ] member [accessibility-modifier] [self-identifier.]PropertyName
with get() =
    get-function-body

// set onlyのプロパティ宣言.
[ attributes ]
[ static ] member [accessibility-modifier] [self-identifier.]PropertyName
with set parameter =
    set-function-body
                


サンプルでみるプロパティ


 以下は簡単なプロパティのサンプルになります。


 プロパティは主にローカルフィールドを公開したい場合に利用する機能です。また、プロパティは適切にアクセシビリティを定義することによって、影響範囲を狭めることが可能です。すべてget/set両対応のプロパティとして公開することは、アンチパターンとして知られています。基本的にローカルフィールドは公開しないほうが良いものなので、極力公開しない方向でクラス設計をするべきです。これはオブジェクト指向プログラミングで言うところの「カプセル化(情報の隠蔽化)」を守るためです。
 プロパティは非常に便利な機能ですが、あまり使いすぎるとコードのそこ・ここに影響力のあるクラスになってしまうので、細心の注意を払って利用するよう心掛けましょう。