アカウント名:
パスワード:
2005 年あたりから ReSharper という Visual Studio というアドインを利用しています。ReSharper のデフォルト設定は _ 付きだったので、それが普通なんだと思って、そのときから _ 付きに変えてます。
> 本家のC#においては、プレフィックスを付けずに this. で参照する文化があり
ASP.NET Core のフレームワークのソースコードも _ 付きなので、_ 付けないほうが少数派だと思っていました。
個人的には統一されていて、コードチェッカーでちゃんと検査してくれるならどっちでもいいんじゃないかと思いますが。
自分の観測範囲だと、Microsoft の名前付け規約無視している人たち (そもそも知らない) が多いので、混乱なんか起きないんじゃないかなあと思います。
thisで参照する文化というよりもVisualStudioのエディタでthis.と入力するとインテリセンスでフィールド/プロパティ/メソッド/イベント各種が候補に出るので判り易いからだと思うけど。だからthis.と手癖で入力する。
あと、変数とフィールドを同じ名前にしてしまってバグる可能性が減らせる。
あった方が読みやすくて好きだったけどなVBのMeとどちらかに揃えてくれとは思ったけど
むしろ、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; }
このパターンはクラスの属性とクラスが属するスコープで変数名が被ってるだけだから同じ名前を使えるのでは?
つかえるし、使わないと名前考えるのめんどくさいから、thisつかって同じ名前でやってますって話だと思うぞ。
使わなくても違う名前を考える必要などないという話だが。
どこに対してツッコミを入れてるのかわからなかったが、(this を)使わなくても というつっこみなら、
は this は使わないとだめ。クラスの属性といっているので、暗黙に name フィールドは存在する。
(これ以外のサンプルは、thisを使わないとめんどくさくなるという話なので関係ない。)
使えますね。暗黙的にコンパイラが this.name = name; だと理解してくれますただ、警告は出るし this.name = name; にしろと言ってきます
public class Dog { private string name; public Dog ( string name ) { name = name; // VisualStudioだと「同じ変数が割り当てられた」と警告してくる }}
そんな VB6のMeみたいな使い方・・・
プロパティやメソッドやイベントに thisつけるのは勘弁して欲しいなぁ。あとで消してるならいいけど。(人が作ったクラスとかで一時的に検索するためにならわかる。クラス内だとをリューションエクスプローラでメソッド検索したり、メソッド一覧ウィンドウ表示するほどじゃないしね。)
その場で ctrl + space とか、名前をわかりやすくしてればそんなにお世話にならないと思うんだけども。参照が多すぎるか逆にクラスライブラリに分離してないのか。
んーとthis使う場合はthis._varになるんでは?外化は見えない変数にプレフィックスつけるというのとオブジェクト内の変数にアクセスするときにthisをつけると言うのは別々の話で同時にやるときがある。
> 別々の話でうん。
> 同時にやるときがある。うん?
var this._var = 100;とかやりません?あとはvar this.var = this._varvar*100;とかやりません?あとは
Visual Studio標準設定でもthis付けると薄文字で表示されて「省略できるよ」って表示されるからthisは使わなくなった。
https://docs.microsoft.com/ja-jp/dotnet/standard/design-guidelines/gen... [microsoft.com]
このセクションでは、単語の選択に関連する一般的な名前付け規則、略語と頭字語の使用に関するガイドライン、言語固有の名前の使用を回避するための推奨事項について説明します。(略)アンダースコア、ハイフン、英数字でないその他の文字はいずれも使用しないでください。
いや、Microsoft の名前付け規約無視している (そもそも知らない)のお前。
そもそも今までのMSのガイドラインはpublic/protectedなモジュールの外に公開するものに対してのみ規定されてたのprivate/internalなモジュール内で完結するものについては特に言及がなかったし実際.NET Frameworkの標準ライブラリ内でも単独の規約を守って作られていたわけではない.NET Coreでオープンソース化するにあたって.NET Coreの標準ライブラリにおいてモジュール外非公開のものについても規約を決める必要があって定義されたのがこれそれが今回.NETにおける開発全般の標準規約として示されたという状況
外部に公開するプロパティとかはそうだね。
_はプロパティのバッキングフィールド用として使われてた。
これが全てだよな。
同じく、ReSharperが付けろっていうので _ 付ける派。最近はもっぱらRider使ってるけど。このあたりはMSとJetBraindで解釈違いがあるんだなぁとは思ってたけど、そもそもMSの中の人も好みがあるっぽいので、じゃあもうJetBrainsの人が考えたデフォでいいやって思ってそっちに寄せてる。
凡人の好みなんぞよりJetBrainsの天才の方々たちが考えたデフォ設定の方が尊いに決まってるしネ。
privateについてはあまり言及してないし、Reference Sourcesとかで公開してたころは混在していて完全に好みだった。
内部メソッド内でプロパティにアクセスしたいか、フィールドでアクセスしたいかなんかの好みにもよってくるのだろうな。(内部のメソッドでもプロパティアクセスしたいなら、検索性を下げるためにフィールドに適当な記号をつける。)
プロパティは大文字だしあんまり困った記憶ないのだけど。リファクタの時にアンダースコア無くなったり付いたり変わるのが気になるかな。
まぁクラス内で統一さえされてればいいけれど。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
計算機科学者とは、壊れていないものを修理する人々のことである
_ 付きが普通だと思ってました... (スコア:1)
2005 年あたりから ReSharper という Visual Studio というアドインを利用しています。ReSharper のデフォルト設定は _ 付きだったので、それが普通なんだと思って、そのときから _ 付きに変えてます。
> 本家のC#においては、プレフィックスを付けずに this. で参照する文化があり
ASP.NET Core のフレームワークのソースコードも _ 付きなので、_ 付けないほうが少数派だと思っていました。
個人的には統一されていて、コードチェッカーでちゃんと検査してくれるならどっちでもいいんじゃないかと思いますが。
自分の観測範囲だと、Microsoft の名前付け規約無視している人たち (そもそも知らない) が多いので、混乱なんか起きないんじゃないかなあと思います。
Re:_ 付きが普通だと思ってました... (スコア:1)
thisで参照する文化というよりもVisualStudioのエディタでthis.と入力するとインテリセンスでフィールド/プロパティ/メソッド/イベント各種が候補に出るので判り易いからだと思うけど。だからthis.と手癖で入力する。
あと、変数とフィールドを同じ名前にしてしまってバグる可能性が減らせる。
Re: (スコア:0)
あった方が読みやすくて好きだったけどな
VBのMeとどちらかに揃えてくれとは思ったけど
Re: (スコア:0)
むしろ、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; }
Re: (スコア:0)
このパターンはクラスの属性とクラスが属するスコープで変数名が被ってるだけだから同じ名前を使えるのでは?
Re: (スコア:0)
つかえるし、使わないと名前考えるのめんどくさいから、thisつかって同じ名前でやってますって話だと思うぞ。
Re: (スコア:0)
使わなくても違う名前を考える必要などないという話だが。
Re: (スコア:0)
どこに対してツッコミを入れてるのかわからなかったが、
(this を)使わなくても というつっこみなら、
public Dog(string name) { this.name = name; }
は this は使わないとだめ。
クラスの属性といっているので、暗黙に name フィールドは存在する。
(これ以外のサンプルは、thisを使わないとめんどくさくなるという話なので関係ない。)
Re: (スコア:0)
使えますね。暗黙的にコンパイラが this.name = name; だと理解してくれます
ただ、警告は出るし this.name = name; にしろと言ってきます
public class Dog {
private string name;
public Dog ( string name ) {
name = name; // VisualStudioだと「同じ変数が割り当てられた」と警告してくる
}
}
Re: (スコア:0)
そんな VB6のMeみたいな使い方・・・
プロパティやメソッドやイベントに thisつけるのは勘弁して欲しいなぁ。あとで消してるならいいけど。
(人が作ったクラスとかで一時的に検索するためにならわかる。クラス内だとをリューションエクスプローラでメソッド検索したり、メソッド一覧ウィンドウ表示するほどじゃないしね。)
その場で ctrl + space とか、名前をわかりやすくしてればそんなにお世話にならないと思うんだけども。
参照が多すぎるか逆にクラスライブラリに分離してないのか。
Re: (スコア:0)
んーとthis使う場合はthis._varになるんでは?
外化は見えない変数にプレフィックスつけるというのとオブジェクト内の変数にアクセスするときにthisをつけると言うのは別々の話で同時にやるときがある。
Re: (スコア:0)
> 別々の話で
うん。
> 同時にやるときがある。
うん?
Re: (スコア:0)
var this._var = 100;とかやりません?
あとは
var this.var = this._varvar*100;とかやりません?
あとは
Re: (スコア:0)
Visual Studio標準設定でもthis付けると薄文字で表示されて「省略できるよ」って表示されるからthisは使わなくなった。
Re: (スコア:0)
https://docs.microsoft.com/ja-jp/dotnet/standard/design-guidelines/gen... [microsoft.com]
このセクションでは、単語の選択に関連する一般的な名前付け規則、略語と頭字語の使用に関するガイドライン、言語固有の名前の使用を回避するための推奨事項について説明します。
(略)
アンダースコア、ハイフン、英数字でないその他の文字はいずれも使用しないでください。
いや、Microsoft の名前付け規約無視している (そもそも知らない)のお前。
Re:_ 付きが普通だと思ってました... (スコア:5, 参考になる)
そもそも今までのMSのガイドラインはpublic/protectedなモジュールの外に公開するものに対してのみ規定されてたの
private/internalなモジュール内で完結するものについては特に言及がなかったし実際.NET Frameworkの標準ライブラリ内でも単独の規約を守って作られていたわけではない
.NET Coreでオープンソース化するにあたって.NET Coreの標準ライブラリにおいてモジュール外非公開のものについても規約を決める必要があって定義されたのがこれ
それが今回.NETにおける開発全般の標準規約として示されたという状況
Re: (スコア:0)
そもそも今までのMSのガイドラインはpublic/protectedなモジュールの外に公開するものに対してのみ規定されてたの
private/internalなモジュール内で完結するものについては特に言及がなかったし実際.NET Frameworkの標準ライブラリ内でも単独の規約を守って作られていたわけではない
.NET Coreでオープンソース化するにあたって.NET Coreの標準ライブラリにおいてモジュール外非公開のものについても規約を決める必要があって定義されたのがこれ
それが今回.NETにおける開発全般の標準規約として示されたという状況
Re: (スコア:0)
外部に公開するプロパティとかはそうだね。
Re: (スコア:0)
_はプロパティのバッキングフィールド用として使われてた。
Re: (スコア:0)
個人的には統一されていて、コードチェッカーでちゃんと検査してくれるならどっちでもいいんじゃないかと思いますが。
これが全てだよな。
Re: (スコア:0)
同じく、ReSharperが付けろっていうので _ 付ける派。最近はもっぱらRider使ってるけど。
このあたりはMSとJetBraindで解釈違いがあるんだなぁとは思ってたけど、そもそもMSの中の人も好みがあるっぽいので、
じゃあもうJetBrainsの人が考えたデフォでいいやって思ってそっちに寄せてる。
凡人の好みなんぞよりJetBrainsの天才の方々たちが考えたデフォ設定の方が尊いに決まってるしネ。
Re: (スコア:0)
privateについてはあまり言及してないし、Reference Sourcesとかで公開してたころは混在していて完全に好みだった。
内部メソッド内でプロパティにアクセスしたいか、フィールドでアクセスしたいかなんかの好みにもよってくるのだろうな。
(内部のメソッドでもプロパティアクセスしたいなら、検索性を下げるためにフィールドに適当な記号をつける。)
プロパティは大文字だしあんまり困った記憶ないのだけど。
リファクタの時にアンダースコア無くなったり付いたり変わるのが気になるかな。
まぁクラス内で統一さえされてればいいけれど。
Re: (スコア:0)
2005 年あたりから ReSharper という Visual Studio というアドインを利用しています。ReSharper のデフォルト設定は _ 付きだったので、それが普通なんだと思って、そのときから _ 付きに変えてます。
> 本家のC#においては、プレフィックスを付けずに this. で参照する文化があり
ASP.NET Core のフレームワークのソースコードも _ 付きなので、_ 付けないほうが少数派だと思っていました。
個人的には統一されていて、コードチェッカーでちゃんと検査してくれるならどっちでもいいんじゃないかと思いますが。
自分の観測範囲だと、Microsoft の名前付け規約無視している人たち (そもそも知らない) が多いので、混乱なんか起きないんじゃないかなあと思います。