値を取得するようなメソッド名をつけるとき、いつもGet~とするかCreate~とするか迷います。
・Get~は値を取得する場合
・Create~はオブジェクトを生成する場合
のような感覚で使っているのですが、
例えば、pointなどの構造体を計算して取得する場合はどちらを使うべきか?などよく迷います。
そもそも、Get~というメソッド名自体があいまいなので別の単語を使ったほうがいいような気もします。
このあたりのメソッド名のつけ方として何らかの指針となる考え方等ありましたらご教示お願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答9件
0
ベストアンサー
私はメソッド名の先頭には処理を表す動詞(create,calculate)を付けますね。
変数をそのまま返すようなメソッドは極力作らないようにします。
C#はプロパティにアクセサを指定できるのでgetメソッドを作る必要もないのではと思います。
投稿2017/01/16 09:03
総合スコア303
0
こんにちは。
使用するフレームワーク(.NET Framework)やライブラリのそれと合わせることを基本としながら、もし「いちから自分で選べ」となったときは
- 結果的に値を返す以外の作用も引き起こす場合は Create や Generate など
-- ファイルを作成してファイルオブジェクトを返す
-- DB に接続(セッションを作成)してDB接続オブジェクトを返す
- 提供する情報に関してそのオブジェクトが持っているデータ(そのオブジェクト全体の場合も)から、ダウンキャスト的あるいは継承関係に無いインスタンスを生成して返す場合は Create や Generate や Convert など
- そのオブジェクト(の責任範囲)の状態に変化がないあいだは返される値が同じであればプロパティ
-- グラフィック(キャンバス)オブジェクトなどにマップされる矩形領域のサイズ
-- データベース接続オブジェクトの接続状態(Status:接続状態は「データベース接続オブジェクト」の責任範囲)
- そのオブジェクト(の責任範囲)の状態に変化がなくても外的要因の変化で返される値が変わる場合は Get、とくに時間がかかったり、計算していることを強調する場合は Calculate や Compute など
と、私は選択しているようです。。
投稿2017/01/17 06:00
編集2017/01/17 07:10総合スコア728
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/17 16:03
2017/01/19 03:41
2017/01/20 01:08 編集
0
Create …ファクトリやビルダ等で新しいクラスインスタンスを生成して返す時
Get …リポジトリ等から既に存在する値を取得する時
Point構造体は構造体のためにほとんどの場合GetもCreateも使いません
クラス名が何をするか表しているならCalculateにするし
でなければPointの変更を表す関数名(移動だったらMove等)にします
C#
1var hero = CharactersRepository.Get(heroId); 2var enemy = CharactersBuilder.Default 3 .Location(Map.FindNearestEmptyLocation(hero.Location)) 4 .Create(Enemy.Goblin); 5 6//... 7 8enemy.MoveAwayFrom(hero); 9Console.WriteLine($"{enemy.Name}は{hero.Name}から離れた({enemy.Location})");
投稿2017/01/17 01:56
総合スコア1591
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。