プロパティとメソッドは何を基準に使い分けるのでしょうか?
プロパティは状態、メソッドは振る舞いというのはわかるのですが
例えば人名を表す値オブジェクトがあったとします。
c#
1public sealed class PersonName : ValueObject 2{ 3 private string _firstName; 4 private string _lastName; 5 6 public PersonName(string firstName, string lastName) 7 { 8 _firstName = firstName; 9 _lastName = lastName; 10 } 11 12 ... 13}
このオブジェクトに画面表示用の値を追加する場合
C#
1public string DisplayValue => $"{_firstName} {_lastName}";
のようにプロパティにすべきか
C#
1public string ToDisplayValue() => $"{_firstName} {_lastName}";
のようにメソッドにすべきか、判断基準がよくわかりません。
デバッグ時には、値がすぐ見られるのでプロパティのほうが便利ですが、その分IDEに負荷がかかる(遅くなる)のかなと思います。
上記は簡単なケースなのでどちらでも変わらないかもしれませんが、より複雑になった場合に何を基準に使い分けをおこなうのでしょうか?
んん。
プロパティはあくまで情報を保管しておく箱であり、メソッドは一定の処理を返す道具なので、そもそも根本的に役割が違うのでは?
どこからきた疑問なのでしょう
プロパティとメソッド、それぞれが生まれた経緯を知ると良いかもしれません。
箱というのはメモリ領域という解釈でよろしいでしょうか?そうしますとm.ts10806さんの場合は、上記のケースの場合、選択の余地なくメソッドを選択されるという意味でしょうか?
私は、オブジェクトの現在の状態へのインターフェースがプロパティと解釈しています。たとえばウィンドウの大きさには、Window オブジェクトの Width や Height を使ってその状態にアクセスできます。
箱と言うと出し入れできるように想像してしまいますが、プロパティの場合は無限に出すことしかできないものもあり、また入れたものがそのまま出てくるとも限りません。不適切な代入は適切な値に変換されることもあるでしょう。
この質問の DisplayValue は _firstname や _lastname と同じくオブジェクトの持つ状態の一つでしかないのでプロパティが妥当だと思います。
ToString がプロパティではなくメソッドなのは、オブジェクトの状態ではなくオブジェクト全体を文字列に変換するという意味があるからですが、ToString で得られる文字列をそのまま返す Text プロパティが別にあっても構わないと思います。この場合、同じ結果が得られるメソッドとプロパティが同時に存在し、どちらを使っても良いことになります。プロパティにした場合、UI にバインドできる、シリアライズが簡単になるなどのメリットが生まれます。
そうなんです。ToString()がメソッドなのも迷いが生まれた一因でした。
説明いただいて納得しました。ありがとうございました。
回答6件
あなたの回答
tips
プレビュー