- - PR -
変数名に変数の型のプレフィックスを付けることに関しての質問および投票です
投票結果総投票数:128 | |||
---|---|---|---|
賛成 | ![]() |
23票 | 17.97% |
反対 | ![]() |
84票 | 65.62% |
機能限定なら賛成 | ![]() |
17票 | 13.28% |
その他 | ![]() |
4票 | 3.12% |
|
投稿者 | 投稿内容 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-02-12 11:02
プロパティ変数というのはメンバー変数のことですね? 僕もメンバー変数には「_(アンダーバー)」をつけます。 アクセサ(プロパティ)のほうにはつけません。 理由は慣例であるということもありますが、 .NETの場合、プロパティという仕様があり、大文字で始めるのが 定石ですね?(メソッドも同じく…) そこで、メンバー変数のほうは小文字で始めて、プロパティのほうは 大文字で始めるという意見もあるようですが、 VBでは大文字小文字の区別がなく、同様にするとコンパイルエラーに なるそうで、 僕はVBを使いませんが、他の開発者が僕のモジュールを再利用(変換など…) することも考えると、大文字小文字のみで判断するような規約にはしない ほうが良いかと感じています。 という訳で、仕方なく「_(アンダーバー)」をつけます。 一部意見で「見やすい」「分かりやすい」とあったりしますが、 それには同意しません。 なぜ、アンダーバーかというと、 英語だと何か意味があるかととられてしまう可能性があるからです。 また、なぜ、メンバー変数だけプレフィックスをつけるかというと、 僕の場合は、メンバー変数はすべてプライベートにして、必ず、 アクセサ(プロパティが主)を使ってアクセスするからです。 だから、メンバー変数が現れるのは、アクセサ内、もしくは、 場合によってはコンストラクタ内のみということになります。 また、.Net Framework3.0では、プロパティに変数名が必要なくなる (自動的に用意される)と聞きますので、 これからは、アンダーバーも必要なくなるかと思っています。 因みに、Javaであれば、大文字小文字を意識しない環境から使われること は(たぶん)なく、アクセサは「getXXX()」「setXXX()」が一般的ですので、 アンダーバーを使うことはありません。 | ||||||||||||||||||||||||
|
投稿日時: 2008-02-12 11:44
これはさすがに頂けないですね。 プロパティ変数は直接扱わないので型のプレフィクスがついていても意味がありません。 あ! プロパティ名さえ型を示すプリフィクスがついているから、プロパティ変数も同様になるというオチっぽいですね。
嫌いなものを押し付けられれば誰でもストレスは溜まると思いますよ。 ハンガリー記法に限った話ではなく、私も某 S 社の規約には泣かされてきました。
会社によって切り替えることに慣れちゃったのであまり苦にはならなくなりましたが、当初は確かに混乱しました。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||||||
|
投稿日時: 2008-02-12 11:51
プロパティの実体になるフィールド メンバのことです。 "メンバ変数" だと、状態を示す単なるフィールド メンバなども含まれる (この場合はアンダーバーではなく Camel 形式の表記になりここでは別物です) ので誤解を避けるためにプロパティ変数という言葉を使ってしまいました。 一般的な言葉ではありませんね。(VB6 時代の雛形コードに記載はあります) 申し訳ありません。
ガイドラインでは明示はされていませんが、NCL ではそうなっている (すべてではない) ようなので、私もそれに倣っています。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||||||
|
投稿日時: 2008-02-12 12:08
それよりも、意見を頂戴したいことがあるのですが、
1.「.NETではプロパティは大文字で始めるのが定石」 (これは、間違いないですよね?) 2.「クラス名には「C」などプレフィックスは付けない」 (マイクロソフトが推奨していると聞きました) 1、2から、 クラスAのプロパティとしてクラスBのインスタンスを持つとき、 クラスBのクラス名とプロパティ名がぶつかることってないですか?
上記はレンタカー・システムの一部で、 車IDは当初uintでしたが、IDの中に意味を持たせるという要求のため、 クラスに変えました。 客IDのほうを変更するなら、クラス名はCustomerIDで、プロパティ名は IDでOKかと思いますが、 車IDのほうは、そうはいきません。 意味をもとに考えてもやっぱりCarIDかな? と。。。 現状は、CurrentCarIDとか、OwnCarIDとか考えまして、 最終的に、RentalCarIDとしていますが、 全体がレンタカーシステムですから、冗長な気もします。 Javaなら、
とするところですが、 .NETの定石はどうなんでしょうか? 上記は一例ですので、一般的にどうなのか? そんなことになること自体がおかしい(設計が悪い)のか? | ||||||||||||||||||||||||
|
投稿日時: 2008-02-12 12:14
すみません。
別スレッドにすべきでした。。。が、これから会議が(^_^;; 新スレッド先に作ってもらっても結構です。。。って、ぉぃ! | ||||||||||||||||||||||||
|
投稿日時: 2008-02-12 12:35
会議中。。。気になったので。。。
「プロパティの実体になるフィールド メンバ」というのが公式名称でしょうか? また、「状態を示す単なるフィールド メンバ」とは、何でしょう? フィールド メンバとしては存在するけれど、プロパティは定義しないということ でしょうか? つまり、private, protected(internalも?)なフィールド メンバと。。。 もし、そうなら、僕はソレも必ずプロパティにしています。 OO的にはそうすべき理由がたくさんありますが、 .NET的になにか不味いことってありますか? あと、Camel形式は、大文字始まりですか? だとすると、インテリセンスなどでプロパティ名とかぶって見辛いことが。。。 責めるつもりは全然ありませんので。。。まじめな質問と受け取ってください(^_-)-☆ # いつか、「どっとねっとふぁん」さんを「じゃんぬねっとふぁん」さんと # 書き間違えたという爆笑スレッドがありましたが、 # その方と同様、僕も、じゃんぬねっとさんのファンですから(笑) | ||||||||||||||||||||||||
|
投稿日時: 2008-02-12 14:33
一部を自己レス
Camel 形式 識別子の最初の文字は小文字にし、後に続いて連結されている各単語の最初の文字を大文字にします。次に例を示します。 backColor http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpgenref/html/cpconpropertynamingguidelines.asp とありました。すみません<m(__)m> この質問は忘れてください<m(__)m> | ||||||||||||||||||||||||
|
投稿日時: 2008-02-12 19:02
会議に集中しましょうw
私なりに説明じみた言葉で書いてみただけですので、公式名称ではないと思われます。 公式名称らしい名称は私は聞いたことがないです。 VB6 では 「プロパティ変数」 で通用すると思います。
簡単に言えばそういうことになります。 クラス内でのスコープで宣言されている以上、'クラスの状態を示す (管理する) 何か' という見方で差し支えないと思います。
アクセス修飾子はあまり関係ないですね。 フィールドはフィールドですから。
ないですよ。 仮に Private なプロパティであっても推奨したいくらいです。
大文字始まる単語ごとに大文字始まりは Pascal 形式です。 Camel は小文字始まり単語ごとに大文字始まりです。 らくだ (Camel) のコブの如しですね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |