質問: c# デリゲート関連の命名について こんにちは。c#初心者です。 今回はデリゲート関連の命名についての質問です。 // ――――――――――――――――――――――――――――――― // 簡素化のため、フィールド変数のまま書いています public delegate int sampledelegate(); public sampledelegate sampleaction; public int value { get { return sampleaction(); } } // ――――――――――――――――――――――――――――――― 上記のようなコードを書いているのですが、「sampledelegate」に当たる部分、「sampleaction」にあたる部分にはどのような名前をつければいいのかと迷っています。 sampledelegateは値を取得するメソッドを表すので「gettingvalue」や、「valuegetter」がいいのか、それとも「valuepasser」みたいなのがいいのか、それ以外がいいのか、 sampleactionも「valuegetter」がいいのかそれとも、メソッドと同じように「getvalue」にするのがいいのかそれ以外がいいのかと悩んでいます。 最初は「sampledelegate」が「gettingvalue」、「sampleaction」が「valuegetter」になっているのですが、反対の方がいいような気がしたり、その他いろいろで困っています。 どなたか詳しい方いらっしゃいましたら教えていただけませんか? できれば「『sampleaction』は動作自体だからgettingvalueのように『~すること』 のように動名詞を使い方がいい」のように他の命名においても応用が利く教え方にしていただけるとありがたいです。
回答: 文字列長判定や開始、終了の文字、特定の文字(列)が、ある文字列中に含まれているかの判別については listの管理とは概念的に別なので listサイドに突っ込まれてない形になってる方が分かりやすいです。 (listから取り出した文字列を使って、listの外で判定する) ここもまた、オブジェクト指向の考え方です。 「listの要素に」含まれているかどうかの判別は listを継承してればexistsで簡単にできると思いますが もっと簡単にするならこういう事も考えられます ↓(制限可能、という意味でlimitableに変え、さらに0のときの仕様を変えました) public class limitablelist: list { //さっきのは実際には「0より大きい時」でしたが、今回はほんとに0以上を指定すると上限を設定 public int limit { get; set; } public new bool add(t t) { if (0 <= limit && limit <= count) return false; base.add(t); return true; } public void unlimit(){ limit = -1; } public bool exist(t t){ return exists(a => { return a.equals(t); }); } public limitablelist(int limit) { limit = limit; } public limitablelist() : this(-1) { } } 実験 using nameoflibrary; ・ ・ ・ limitablelist list = new limitablelist(0); text += " " + list.add("追加0"); //この時点では追加されない list.unlimit(); text += " " + list.add("追加1"); text += " " + list.add("last"); text += " " + (list.exist("last") ? "exists" : "not exist"); text += " " + (list.exist("追加0") ? "exists" : "not exist"); 結果 false true true exists not exist