パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

MicrosoftのC#コーディング規約に「privateフィールドにはプレフィックス」と追記されて混乱を呼ぶ」記事へのコメント

  • 2005 年あたりから ReSharper という Visual Studio というアドインを利用しています。ReSharper のデフォルト設定は _ 付きだったので、それが普通なんだと思って、そのときから _ 付きに変えてます。

    > 本家のC#においては、プレフィックスを付けずに this. で参照する文化があり

    ASP.NET Core のフレームワークのソースコードも _ 付きなので、_ 付けないほうが少数派だと思っていました。

    個人的には統一されていて、コードチェッカーでちゃんと検査してくれるならどっちでもいいんじゃないかと思いますが。

    自分の観測範囲だと、Microsoft の名前付け規約無視している人たち (そもそも知らない) が多いので、混乱なんか起きないんじゃないかなあと思います。

    • by Anonymous Coward on 2021年05月16日 19時50分 (#4032269)

      thisで参照する文化というよりもVisualStudioのエディタでthis.と入力するとインテリセンスでフィールド/プロパティ/メソッド/イベント各種が候補に出るので判り易いからだと思うけど。だからthis.と手癖で入力する。

      あと、変数とフィールドを同じ名前にしてしまってバグる可能性が減らせる。

      親コメント
      • by Anonymous Coward

        あった方が読みやすくて好きだったけどな
        VBのMeとどちらかに揃えてくれとは思ったけど

      • by Anonymous Coward

        むしろ、thisを付けると変数とフィールドを同じ名前にできて楽だと考えて使ってた。

        public Dog(string name) { this.name = name; }

        こういう所でnameを受け取るためだけに毎度適切な名前を考えるのが邪魔くさい。
        考えなくて済むようにしよう、とすると、悪名高いプレフィックスが出てくる。

        public Dog(string name) { mName = name; }

        あるいは、

        public Dog(string _name) { name = _name; }

        public Dog(string name) { _name = name; }

        • by Anonymous Coward

          このパターンはクラスの属性とクラスが属するスコープで変数名が被ってるだけだから同じ名前を使えるのでは?

          • by Anonymous Coward

            つかえるし、使わないと名前考えるのめんどくさいから、thisつかって同じ名前でやってますって話だと思うぞ。

            • by Anonymous Coward

              使わなくても違う名前を考える必要などないという話だが。

              • by Anonymous Coward

                どこに対してツッコミを入れてるのかわからなかったが、
                (this を)使わなくても というつっこみなら、

                public Dog(string name) { this.name = name; }

                は this は使わないとだめ。
                クラスの属性といっているので、暗黙に name フィールドは存在する。

                (これ以外のサンプルは、thisを使わないとめんどくさくなるという話なので関係ない。)

          • by Anonymous Coward

            使えますね。暗黙的にコンパイラが this.name = name; だと理解してくれます
            ただ、警告は出るし this.name = name; にしろと言ってきます

            public class Dog {
                private string name;
                public Dog ( string name ) {
                    name = name; // VisualStudioだと「同じ変数が割り当てられた」と警告してくる
                }
            }

      • by Anonymous Coward

        そんな VB6のMeみたいな使い方・・・

        プロパティやメソッドやイベントに thisつけるのは勘弁して欲しいなぁ。あとで消してるならいいけど。
        (人が作ったクラスとかで一時的に検索するためにならわかる。クラス内だとをリューションエクスプローラでメソッド検索したり、メソッド一覧ウィンドウ表示するほどじゃないしね。)

        その場で ctrl + space とか、名前をわかりやすくしてればそんなにお世話にならないと思うんだけども。
        参照が多すぎるか逆にクラスライブラリに分離してないのか。

      • by Anonymous Coward

        んーとthis使う場合はthis._varになるんでは?
        外化は見えない変数にプレフィックスつけるというのとオブジェクト内の変数にアクセスするときにthisをつけると言うのは別々の話で同時にやるときがある。

        • by Anonymous Coward

          > 別々の話で
          うん。

          > 同時にやるときがある。
          うん?

          • by Anonymous Coward

            var this._var = 100;とかやりません?
            あとは
            var this.var = this._varvar*100;とかやりません?
            あとは

    • by Anonymous Coward

      Visual Studio標準設定でもthis付けると薄文字で表示されて「省略できるよ」って表示されるからthisは使わなくなった。

    • by Anonymous Coward

      https://docs.microsoft.com/ja-jp/dotnet/standard/design-guidelines/gen... [microsoft.com]

      このセクションでは、単語の選択に関連する一般的な名前付け規則、略語と頭字語の使用に関するガイドライン、言語固有の名前の使用を回避するための推奨事項について説明します。
      (略)
      アンダースコア、ハイフン、英数字でないその他の文字はいずれも使用しないでください。

      いや、Microsoft の名前付け規約無視している (そもそも知らない)のお前。

      • by Anonymous Coward on 2021年05月16日 19時48分 (#4032268)

        そもそも今までのMSのガイドラインはpublic/protectedなモジュールの外に公開するものに対してのみ規定されてたの
        private/internalなモジュール内で完結するものについては特に言及がなかったし実際.NET Frameworkの標準ライブラリ内でも単独の規約を守って作られていたわけではない
        .NET Coreでオープンソース化するにあたって.NET Coreの標準ライブラリにおいてモジュール外非公開のものについても規約を決める必要があって定義されたのがこれ
        それが今回.NETにおける開発全般の標準規約として示されたという状況

        親コメント
        • by Anonymous Coward

          そもそも今までのMSのガイドラインはpublic/protectedなモジュールの外に公開するものに対してのみ規定されてたの
          private/internalなモジュール内で完結するものについては特に言及がなかったし実際.NET Frameworkの標準ライブラリ内でも単独の規約を守って作られていたわけではない
          .NET Coreでオープンソース化するにあたって.NET Coreの標準ライブラリにおいてモジュール外非公開のものについても規約を決める必要があって定義されたのがこれ
          それが今回.NETにおける開発全般の標準規約として示されたという状況

      • by Anonymous Coward

        外部に公開するプロパティとかはそうだね。

    • by Anonymous Coward

      _はプロパティのバッキングフィールド用として使われてた。

    • by Anonymous Coward

      個人的には統一されていて、コードチェッカーでちゃんと検査してくれるならどっちでもいいんじゃないかと思いますが。

      これが全てだよな。

    • by Anonymous Coward

      同じく、ReSharperが付けろっていうので _ 付ける派。最近はもっぱらRider使ってるけど。
      このあたりはMSとJetBraindで解釈違いがあるんだなぁとは思ってたけど、そもそもMSの中の人も好みがあるっぽいので、
      じゃあもうJetBrainsの人が考えたデフォでいいやって思ってそっちに寄せてる。

      凡人の好みなんぞよりJetBrainsの天才の方々たちが考えたデフォ設定の方が尊いに決まってるしネ。

    • by Anonymous Coward

      privateについてはあまり言及してないし、Reference Sourcesとかで公開してたころは混在していて完全に好みだった。

      内部メソッド内でプロパティにアクセスしたいか、フィールドでアクセスしたいかなんかの好みにもよってくるのだろうな。
      (内部のメソッドでもプロパティアクセスしたいなら、検索性を下げるためにフィールドに適当な記号をつける。)

      プロパティは大文字だしあんまり困った記憶ないのだけど。
      リファクタの時にアンダースコア無くなったり付いたり変わるのが気になるかな。

      まぁクラス内で統一さえされてればいいけれど。

    • by Anonymous Coward

      2005 年あたりから ReSharper という Visual Studio というアドインを利用しています。ReSharper のデフォルト設定は _ 付きだったので、それが普通なんだと思って、そのときから _ 付きに変えてます。

      > 本家のC#においては、プレフィックスを付けずに this. で参照する文化があり

      ASP.NET Core のフレームワークのソースコードも _ 付きなので、_ 付けないほうが少数派だと思っていました。

      個人的には統一されていて、コードチェッカーでちゃんと検査してくれるならどっちでもいいんじゃないかと思いますが。

      自分の観測範囲だと、Microsoft の名前付け規約無視している人たち (そもそも知らない) が多いので、混乱なんか起きないんじゃないかなあと思います。

アレゲはアレゲ以上のなにものでもなさげ -- アレゲ研究家

処理中...