質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

6回答

13190閲覧

privateなメンバ(特にプロパティ周り)の命名規則は?

ElecDove

総合スコア254

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

2クリップ

投稿2019/10/09 02:35

編集2019/10/09 02:41

#1 プロパティについて
C#で自動実装ではないプロパティを使う際,

C#

1 2private int hoge = 0; 3public int Hoge{ 4 get {return hoge;} 5 set {hoge = value;} 6}

等としているサンプルを多く見かけますが,個人的には,hogeという名前でhogeとHogeがあるのがどうも気持ち悪く思ってしまいます.
MSのコーディング規則でprivateなメンバについての命名規則はどうやら定義されていないように思うのですが,privateなメンバの命名規則としてよいものがあれば教えてください.
PublicはMSに従ってパスカルケース,Privateはキャメルケースというのが一般的なのでしょうか?

(今までPrivateもPublicも全部パスカルケース(単語先頭文字すべて大文字)で書いていたのですが,この書き方だとプロパティを設けるときに
Hoge_のようにせざるを得ず……(_をメンバの区別に使うべきでないというのも読みました)

#2 引数について

C#

1private int hoge = 0; 2public fuga(int hoge){ 3 //hogeを使った処理 4}

このような場合,引数のhogeなのか,クラス内のメンバであるhogeなのかがわかりづらくなってしまいます.
もちろん,thisがないのでちゃんと考えれば区別はつくのですが,思い込みによるバグの原因になったりしてしまいます.

そこで,引数となる変数には何か引数であることを明示するような命名規則はないでしょうか.
例えば,public fuga(int Argument_hoge)みたいな.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

.NETの命名規則

この記事の頭にまとめられているリンクも読んでみてください。この質問に関係するのは次の部分でしょう。

さらに、プライベートフィールド、ローカル変数、パラメータにはCamel形式(識別子の最初の文字は小文字にし、後に続いて連結されている各単語の最初の文字を大文字にした形式。例:backColor)、それ以外はすべてPascal形式(識別子の最初の文字と、後に続いて連結されている各単語の最初の文字を大文字にした形式。例:BackColor)の名前を付けるようにします。

投稿2019/10/09 02:38

編集2019/10/09 02:39
Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/10/09 03:01 編集

この問題とは少し違うとは思いますが、プレフィクス・サフィクスで変数の種類を表すのに、システムハンガリアン記法という悪名高いものがあります。マイクロソフトはそれを推奨していましたが、いろいろと問題があり、.NET で撤廃しました。興味があればシステムハンガリアンを調べてみてください。
tacsheaven

2019/10/09 09:02

まあ .NET では撤廃してますが MSDN 上は(C++ があるので)残ってますけどね(w
Zuishin

2019/10/09 09:18

確かに。そこを今から変えるのは大変ですからね。
ElecDove

2019/10/12 05:24

これはMS公式ではなく,河端善博さんのC#コーディング標準,ということでしょうか このコーディング標準は世界的にも標準的に使用されているものなのでしょうか.
Zuishin

2019/10/12 05:38

公式のものが冒頭にリンクされていますが、最も単純化されたルールでそれをだいたいカバーできるものです。 世界標準は公式のガイドラインで、そこに書かれていないもの、補足するものはみな独自ルールと受け取っていいと思います。 コーディング規約は組織やプロジェクトで異なり、「これで万全」「これが至高」というものはありません。 https://referencesource.microsoft.com/ で .NET ライブラリのソースを見ることができますが、この中でもいくつかの種類があります。 チームで開発するのであればそのルールに従い、ひとりで開発するのであれば、標準のガイドラインを可能な限り守りながら、決められていない範囲では自分独自のルールを使っていいと思います。 質問にある public なプロパティのフィールドをそのキャメルケースにするという規約はかなりポピュラーなもので、私もこれを採用していますが、馴染めなければ(あまり癖の強くない範囲で)他の規約を作るのがいいのではないでしょうか。
ElecDove

2019/10/12 05:42

>補足するものはみな独自ルール >「これで万全」「これが至高」というものは~ >~この中でもいくつかの種類があります。 なるほど,そうなのですね. >決められていない範囲では自分独自のルール 今は一人コーディングなのでできるだけ公式に添いたいと思っていました >かなりポピュラーなもの デファクトスタンダードになっているものであれば私も採用しようと思います まずはそれで書いてから本当になじめないかどうか考えることにします 回答ありがとうございました
guest

0

MSのコーディング規則でprivateなメンバについての命名規則はどうやら定義されていないように思うのですが,privateなメンバの命名規則としてよいものがあれば教えてください.

伝統的にm_hoge_hogeが使われています。

ただし、C# としては、プレフィックスを使用せずhogeとし、メンバ変数を参照する場合はthisを付けるようにするのが良いと思います。
また、積極的に自動実装プロパティで実装するようにすべきかと思います。

PublicはMSに従ってパスカルケース,Privateはキャメルケースというのが一般的なのでしょうか?

アクセス指定子による使い分けはないと思います。

マイクロソフト公式のガイドラインがありますので、こちらをお読みください。

.NET のガイド > 名前付けのガイドライン
https://docs.microsoft.com/ja-jp/dotnet/standard/design-guidelines/naming-guidelines

このような場合,引数のhogeなのか,クラス内のメンバであるhogeなのかがわかりづらくなってしまいます.
もちろん,thisがないのでちゃんと考えれば区別はつくのですが,思い込みによるバグの原因になったりしてしまいます.

そこで,引数となる変数には何か引数であることを明示するような命名規則はないでしょうか.
例えば,public fuga(int Argument_hoge)みたいな.

マイクロソフト公式の命名規則には、引数名に関するものはないと思いますし、そのような命名規則は聞いたことがないですね。

投稿2019/10/11 09:31

nskydiving

総合スコア6500

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ElecDove

2019/10/12 05:17

>伝統的にm_hogeや_hogeが使われています。 なるほど,mをつけてしまえば_を見落とすこともなさそうです. >引数名に関するものはない~~~~聞いたことがないですね。 ありがとうございました.
guest

0

dobonさんのサイトでも似たような事は言っていますが、
以下のサイトで.NETのソースを見ても
https://referencesource.microsoft.com/
privateなメンバ変数は
hogeだったりm_hogeだったり_hogeだったりするので、この辺はMSとしても決めかねているのでしょうね。

たぶん好きなようにすればいいと思います。

ちなみに周りに聞いたら、自動実装プロパティしか使わない(明示的なprivateメンバ変数は存在しない)という人もいました。

投稿2019/10/09 08:39

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ElecDove

2019/10/12 05:21

>MSとしても決めかねて MSですらそういうことがあるのですね >たぶん好きなようにすればいいと思います。 そうします >自動実装プロパティしか使わない そんなことができるんですね,,,,へぇぇ `RaisePropertyChanged`などは使わないということでしょうか…
guest

0

VBの場合ですと

VBNET

1Public Property Hoge As Integer

とした場合、内部でPrivate _Hoge As Integerと自動で定義されます。
(実際にPrivate _Hoge As Integerと自分で定義するとコンパイルエラーとなります)
この為、自分で実装する時も”_”をつけて定義するようなくせがつきました。
C#のプログラムはあまり作成しないのですが、同様な定義をしてしまいます。

投稿2019/10/09 05:41

YAmaGNZ

総合スコア10258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ElecDove

2019/10/12 05:22

ありがとうございます "_"もありかなと思い始めています. _hogeとするかhoge_とするか…_hogeですかね.
guest

0

自己流なので,メンバ変数は m_hoge みたく m_ を付けてます……
コード上でメンバなのかどうかがぱっと見でわからんのが嫌なので.

投稿2019/10/09 02:51

fana

総合スコア11658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ElecDove

2019/10/12 05:22

>コード上でメンバなのかどうかがぱっと見でわからんのが嫌なので. 同じくです 何をつけるかで質問しましたが,m_派,あるいは_派の方は意外と多そうですね
guest

0

あくまでも自己流ですが、プロパティの実体となる変数には _ を先頭に付けてたりします。逆にその用途以外では _ を先頭に付ける変数を使用しません。

C#

1private int _hoge = 0; 2public int Hoge{ 3 get { return _hoge; } 4 set { _hoge = value; } 5}

投稿2019/10/09 02:41

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ElecDove

2019/10/12 05:23

>逆にその用途以外では _ を先頭に付ける変数を使用しません。 なるほど,そのルールがあればアリなんですね 参考にいたします
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問