C# で private フィールドにアンダースコアを付けるのをしばしば見ます。
C言語出身の人から見ると、まるで予約語になる候補のようで禁忌めいた感覚がします。
メジャーなローカルルールという認識だったのですが、どうなっているか調べてみました。
マイクロソフトの命名規則のガイドラインではどうなっている?
以前は、private なフィールドについてはガイドラインはなかったようなのですが・・・
マイクロソフトの C# のコーディング規則 2021/9/30版だと・・・・
Camel 形式
private または internal のフィールドに名前を付ける場合は、キャメル ケース (“camelCasing”) を使用し、_ を使用してプレフィックスを付けます。
public class DataService
{
private IWorkerQueue _workerQueue;
}
いつの間にか存在しています!
理由を考えた
このルールですが3つほど理由を考えてみました
情勢の変化によるもの
もともと public でない部分については、ふれられていませんでした。
それらについては外部には見えないからです。
ところが現代では、github や ReferenceSource などソースを公開する機会も増えていて
見られることを意識しているのかと思います。
一時変数との区別をつける
他にも理由としては、
アンダースコアがある事で、
メソッド内の一時変数との区別が付き影響範囲が大きいことがひと目でわかる。
引数との区別をつける
メソッドの引数と区別が付く。
例えば、引数をそのまま private フィールドに代入するようなときに以下のように書かず、
this.variableName = variableName;
次のように書ける。
_variableName = variableName;
といったところだと思います。
(メソッドパラメーターについてはキャメル形式が推奨されています)
終わりに
ということで、ローカルルールからいつの間にかコーディング規則になっていたアンダースコアでした。
どんどん使っていきましょう。