###質問
分かりやすい変数名をつけるにはどういうつけ方がベストか?
###現状
例えば下記HogeMethodがあるとして、命名はどうしますか。
---規約---
メソッド名はキャメル式(先頭大文字)
///(summary)
///引数 主キー
///hogeModelに利用者名、利用者情報を設定
///
public void HogeMethod (int hoge){
//hogeを検索条件にした検索処理
....
//上記検索処理で取得したレコードからhogeModelにセット
hogeModel.userName = レコード.userName
hogeModel.userInfo = レコード.userInfo
}
ちなみに私はHogeMethodをGetUserDataByKeyとしましたが、
少し長いような気もしますし、summaryコメントで書いているなら、
長くしなくてもいいんじゃないかとも思ったりします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答10件
0
こんにちは。
メソッドのシグネチャが固定されていないなら、自分だったら以下のように変更すると思います。参考までに。
- メソッドを前半「hogeを検索条件にした検索処理」と後半「レコードからhogeModelにセット」の2つに分け、前者を「UserData GetUserByKey(int key)」、後者を「void UpdateHogeModel(UserData user)」のようにする
まず、戻り値がvoidのメソッドにGetから始まる名前をつけるのはありえないです。メソッドのユーザが何もGetできないわけですから。
基本的に、そのメソッドが何者であるかはそのメソッドのシグネチャから読み取れるようになっていなければなりません。コメントはあくまで補足であり、振る舞いや使い方の説明を含むドキュメントですが、その内「何をするのか」はメソッドシグネチャで表現できる範囲になるはずです。
メソッドの内容がうまくメソッド名に落とし込めない時は、メソッドの内容が分割可能な2つ以上の処理を含んでいる可能性が高いです。仮に、それらを合成して一つのタスクとしたものであると仮定して、良い名前が思いつかないのであれば、それは適切な合成単位ではないという事を示しているとも言えます。
(質問の内容でちょっと気になりましたが、先頭大文字の名前付け規約はパスカル形式ですよ)
投稿2017/04/12 01:21
総合スコア4304
0
利用者情報を戻り値として返しているのであれば skittle さんと同じく
GetUserInfo
にしますが、戻り値なしでメソッド内で設定しているだけなので
SetUserInfo
と私なら付けそうです。
投稿2017/04/12 01:09
総合スコア559
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
少し回答とそれますが、製造系では、ほとんどがローマ字のメソッドになり
SetBuhinTranTableFromBOM()
GetGyomuMasterTableFindByPrimaryKey()
GetPikkinguListFromJittiTanaoroshiTranTableFindByGyomuDay()
とか普通です。
メソッド名の長さに関しては全然余裕かと。
投稿2017/04/12 05:08
編集2017/04/12 05:09総合スコア1294
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
GetUserDataByKeyでも問題ない気はします。
全然長いとは思わないレベルです。
無理に短くしようとしたり、略語を使ったりするよりは、
ある程度長くてもそのメソッドが何をするのかが分かる命名になっているべきです。
ByXXXというネーミングにすることによって
GetUserDataByCode(string code) や
GetUserDataByName(string name) などのメソッドの用意もしやすくなりますし。
GetUserDataのオーバーロードだけではこと足りなくなってから、あとでリファクタリングするよりは
最初からByKeyとつけておくのも有りだと思いますよ。
ただ、workaholistさんも言ってますが、戻り値がvoidのメソッドにGetとつけるべきではないでしょうね。
あとこれは別件ですが、hogeModel.userName や レコード.userName はプロパティではないですか?
C#のプロパティはパスカルケースで書くので、hogeModel.UserName にした方がいいでしょうね。
投稿2017/04/12 01:25
総合スコア4666
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
僕のルールは単純にGet
/GetAsync
ですね。
C#
1public interface IRepository<T> 2{ 3 Task<IEnumerable<T>> FindAsync(IFilter<T> filter); 4 5 Task<T> GetAsync(int id); 6 Task AddAsync(T hoge); 7 Task RemoveAsync(T hoge); 8}
※上記リポジトリインターフェースそのものは適当です
データベースのCRUD処理はIDを元に行われるということをルール化して「ById」は省略しています。
それ以外はByを付けます。
- 必ず取得できなければならないものについては
Get
を使います。 - 見つからない場合にnullのモデルを返すルールであれば最大1レコードの取得にも
Get
を使います。
例)GetByUserNameAsync(string username);
- 条件に合わせて複数の結果を返すものについては
Find
を使います。 - 見つからない場合Exceptionを返すルールで、見つからないことが想定される場合は
Find
を使います。
例) FindByUserNameAsync(string username);
※Asyncメソッドでoutパラメータが使えないのでTryGetとせず、Find側に寄せてます
リポジトリクラス側の特定方法からモデルは類推できるようにします。
このため、メソッド名にモデル名が付くことはほとんどありません。
今個人的に作ってるものは他のフレームワークに則って最終的に以下みたいな見た目にできたらカッコいいな…と思って色々見ながらやってます。うまく行ってるわけじゃないんですけどね。。。
※これよりちょっと回りくどいコードを仕事では書いてます、命名規則は似たようなものです
public class UserDb: UnitOfWorkBase { IRepository<User> Users { get; } IRepository<Role> Roles { get; } // method from UnitOfWorkBase void Commit(); } public class UserService : IUserService { /* .... */ public Task async AddRoleAsync(int userId, int roleId) { using (var db = UoWFactory.Create<UserDb>()) { var user = await db.Users.GetAsync(userId).ConfigureAwait(false); var role = await db.Roles.GetAsync(roleId).ConfigureAwait(false); user.Roles.Add(role); db.Commit(); } } }
投稿2017/04/12 04:22
編集2017/04/12 04:24総合スコア1593
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
こんにちは。
使う側から見ると、そのクラスへint型のhoge値を設定しているように見えます。
hogeModelを設定しているかどうかは内部的な実装とも捉えることができます。
この場合は、SetHogeですね。
しかし、そうではなくhogeModelへ値を設定していることを使う人も把握して使うようなメソッドでしたら、SetupHogeModelやPrepareHogeModelとするかも知れません。少し重い処理だよって表現したくなるので。
投稿2017/04/12 04:13
総合スコア23274
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/12 09:40

0
質問者さんが組織に属していて組織で開発を行っているなら、組織で命名規則を決めて、質問者さんは組織が決めた命名規則に従うというのが普通だと思います。
質問者さんが個人で開発していて、将来的に保守などにも他人が関わることがなければ、質問者さん個人の好みで命名すればよいという話になるかと思います。
なので、基本的には他人に聞く話ではないと思うのですが、迷っているので他人の意見を聞きたいということであれば、今回の質問の例に限って私の好みを言うと、設定目的がメインなら「Set 何とか」、初期化目的がメインなら「Initialize 何とか」にすると思います。
投稿2017/04/12 01:34

退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
例えば int hoge 以外に、string name での検索をするなどのパターンが考えられる場合(hogeModel にセットするためのメソッドが複数存在しうる場合)は、GetUserInfoByHoge とか GetUserInfoByName とか分けますかね。
C# ではメソッドのシグネチャが異なれば大丈夫なので、GetUserInfo(int hoge) と GetUserInfo(string name) の二つを定義することもできますが。
※ただ、GetUserInfo(int id) と GetUserInfo(int age) とかはダメなので、結局名前を変えるかも知れません
投稿2017/04/12 01:19
総合スコア13707
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
プロジェクト内での背景や取り決めなどにもよりますが、私なら上記のメソッドにはFetchUserと書きます。
byIdとしてしまうと、下記の様な書き方(オーバーロード)が出来なくなってしまうので…(VB.NETで書いていますが、基本は同じはず。)
''' <summary> ''' ユーザー情報を使う何らかの処理 ''' </summary> Private Sub hoge() 'ユーザーテーブルをFetchする機能は一緒だから、同じメソッド名で統一 Dim name1 As String = FetchUser(1) 'IDからユーザー情報を取得(name1にはhogeが入る) Dim name2 As String = FetchUser("hoge", "manager") '名称と役職からユーザー情報を取得(name2にはfugaが入る) End Sub ''' <summary> ''' ユーザー情報をIDより取得する。 ''' </summary> ''' <param name="id">ユーザーID</param> Private Function FetchUser(id As Integer) As String 'IDからユーザーを取得する FetchUser = "hoge" End Function ''' <summary> ''' ユーザー名と役職からユーザー情報を取得する ''' </summary> ''' <param name="name">ユーザー名</param> ''' <param name="position">役職</param> Private Function FetchUser(name As String, position As String) As String 'ユーザー名と役職から情報を取得 FetchUser = "fuga" End Function
投稿2017/04/12 01:16
編集2017/04/12 01:17総合スコア3027
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
長短のバランスを考えて私なら利用者情報ということで以下です。
GetUserInfo()
投稿2017/04/12 01:01
総合スコア21
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/12 08:58