web-dev-qa-db-ja.com

変数に名前を付ける方法

  • 変数に名前を付けるためにどのようなルールを使用しますか?
  • 一文字の変数はどこで許可されますか?
  • 名前にはどのくらいの情報を入れますか?
  • たとえばコードはどうですか?
  • 好みの無意味な変数名は何ですか? (foo&barの後)
  • [〜#〜] fubar [〜#〜] ではなく "foo" and "bar" と綴られるのはなぜですか
45
BCS
function startEditing(){
   if (user.canEdit(currentDocument)){
      editorControl.setEditMode(true);
      setButtonDown(btnStartEditing);
   }
 }

物語の作品のように読む必要があります。

47
Tony BenBrahim

私が常に従うルールの1つは、これです。変数が特定の単位の値をエンコードする場合、それらの単位は変数名の一部である必要があります。例:

int postalCodeDistanceMiles;
decimal reactorCoreTemperatureKelvin;
decimal altitudeMsl;
int userExperienceWongBakerPainScale

私は火星着陸船の墜落(または私の退屈なCRUDビジネスアプリケーションでの同等の失敗)について責任を負いません。

15

それはすべて、開発している言語によって異なります。私は現在C#を使用しているので、次のものを使用する傾向があります。

変数のキャメルケース。

パラメータのキャメルケース。

プロパティのPascalCase。

メンバー変数のm_PascalCase。

1文字の変数はどこで許可されますか?私はこれをforループで行う傾向がありますが、そうするたびに少し罪悪感を感じます。しかし、foreachとlambdaの場合、ループの式は今ではそれほど一般的ではありません。

名前にはどのくらいの情報を入れますか?コードが少しわかりにくい場合はコメントを書いてください。変数名をコメントに変えないでください。 int theTotalAccountValueIsStoredHere 必須ではありません。

好みの無意味な変数名は何ですか?(foo&barの後) iまたはx。 fooとbarは、私にとっては少し大学の教科書の例です。

なぜFUBARではなく「foo」と「bar」と綴られているのですか?伝統

12
Craig

これらはすべてC#の規則です。

変数名のケーシング

大文字と小文字は範囲を示します。パスカルケースの変数は、所有するクラスのフィールドです。キャメルケースの変数は、現在のメソッドに対してローカルです。

プレフィックス文字の規則は1つだけです。クラスプロパティのバッキングフィールドはパスカルケースで、アンダースコアが前に付いています。

private int _Foo;
public int Foo { get { return _Foo; } set { _Foo = value; } }

私が見たC#変数の命名規則がいくつかあります-それはMicrosoftのドキュメントだったと確信しています-アンダースコアプレフィックスの使用に反します。それは私にはクレイジーに思えます。コードを調べて、次のようなものが表示された場合

_Foo = GetResult();

私が最初に自問するのは、「そのフィールドを更新するためにプロパティアクセサーを使用しない正当な理由があったのか」ということです。多くの場合、答えは「はい。このコードをいじくり回す前に、それが何であるかを知っておくとよいでしょう」です。

1文字(および短い)変数名

変数名は意味のあるものでなければならないという口実に同意する傾向がありますが、実際には、変数名を意味のあるものにすると、コードの可読性や保守性に何の影響も与えない状況がたくさんあります。

ループイテレータと配列インデックスは、短く任意の変数名を使用するための明白な場所です。あまり明白ではありませんが、私の本ではそれほど適切ではありませんが、ナンスの使用法は次のとおりです。

XmlWriterSettings xws = new XmlWriterSettings();
xws.Indent = true;
XmlWriter xw = XmlWriter.Create(outputStream, xws);

これはC#2.0コードからのものです。もちろん、今日書いた場合、nonce変数は必要ありません。

XmlWriter xw = XmlWriter.Create(
   outputStream, 
   new XmlWriterSettings() { Indent=true; });

ただし、C#コードには、他の場所に渡して破棄するオブジェクトを作成する必要がある場所がまだたくさんあります。

このような状況では、多くの開発者がxwsTempのような名前を使用します。 Tempサフィックスが冗長であることがわかりました。宣言で変数にxwsという名前を付けたという事実(そして、その宣言の視覚的な範囲内でのみ使用しています。これは重要です)は、それが一時変数であることを示しています。

短い変数名を使用するもう1つの場所は、単一のオブジェクトを多用するメソッドです。これが本番コードの一部です:

    internal void WriteXml(XmlWriter xw)
    {
        if (!Active)
        {
            return;
        }
        xw.WriteStartElement(Row.Table.TableName);

        xw.WriteAttributeString("ID", Row["ID"].ToString());
        xw.WriteAttributeString("RowState", Row.RowState.ToString());

        for (int i = 0; i < ColumnManagers.Length; i++)
        {
            ColumnManagers[i].Value = Row.ItemArray[i];
            xw.WriteElementString(ColumnManagers[i].ColumnName, ColumnManagers[i].ToXmlString());
        }
        ...

XmlWriterに長い名前を付けた場合、コードが読みやすくなる(または変更するのが安全になる)方法は世界にはありません。

ああ、どうすればxwが一時変数ではないことを知ることができますか?その宣言が見えないからです。宣言から4行または5行以内の一時変数のみを使用します。それ以上のコードが必要な場合は、意味のある名前を付けるか、それを使用してコードをリファクタリングして、短い変数を引数として取るメソッドに変換します。

名前にはどのくらいの情報を入れますか?

足りる。

それはブラックアートのようなものであることが判明しました。私がしない名前に入れなければならない情報はたくさんあります。変数がプロパティアクセサーのバッキングフィールドであるか、一時的であるか、または現在のメソッドの引数であるかを知っています。これは、私の命名規則でそれが示されているためです。だから私の名前は違います。

これがそれほど重要ではない理由です。

実際には、変数名を理解するために多くのエネルギーを費やす必要はありません。私はその認知的努力のすべてを、タイプ、プロパティ、およびメソッドの命名に注ぎ込みました。これははるかに変数の命名よりも大きな問題です。これらの名前はスコープ内で公開されていることが非常に多いためです(または少なくとも名前空間全体に表示されます)。名前空間内の名前は意味を伝える必要があります同じ方法

このコードブロックには、変数が1つだけあります。

        RowManager r = (RowManager)sender;

        // if the settings allow adding a new row, add one if the context row
        // is the last sibling, and it is now active.
        if (Settings.AllowAdds && r.IsLastSibling && r.Active)
        {
            r.ParentRowManager.AddNewChildRow(r.RecordTypeRow, false);
        }

プロパティ名はほとんどコメントを冗長にします。 (ほとんど。実際には、プロパティがAllowAddsではなくAllowAddingNewRowsと呼ばれる理由があり、多くの考慮が払われましたが、この特定のコードには適用されません。そのためです。コメントがあります。)変数名?誰も気にしない?

5
Robert Rossney
  • ループ制御または非常に短い関数には、1文字の変数のみを使用します。
for(int i = 0; i< endPoint; i++) {...}

int max( int a, int b) {
    if (a > b)
       return a;
    return b;
}
  • 情報の量は変数のスコープによって異なります。使用できる場所が多いほど、その目的を追跡するために名前を付けたい情報が多くなります。
  • サンプルコードを書くときは、実際のコードと同じように変数名を使用しようとします(ただし、関数はfooやbarなどの役に立たない名前を取得する可能性があります)。
  • 「Foo」の語源 を参照してください。
4
acrosman

広く使用されていたほとんどすべての現代語には、独自のコーディング標準があります。これらは素晴らしい出発点です。他のすべてが失敗した場合は、推奨されているものを使用してください。もちろん例外もありますが、これらは一般的なガイドラインです。チームが特定のバリエーションを好む場合は、それらに同意する限り、それでも問題ありません。

しかし、結局のところ、それは必ずしもあなたがどの基準を使用するかではなく、そもそもあなたがそれらを持っていて、それらが守られているという事実です。

4
Charles Graham

変数に名前を付けるためにどのルールを使用しますか?

通常、私はC#開発者であるため、2つの理由から、 IDesign C#コーディング標準 で指定されている変数の命名規則に従います。

1)気に入って、読みやすいです。 2)これは Visual Studio 2005/2008用のコードスタイルエンフォーサーアドイン に付属しているデフォルトであり、最近広く使用しています。

1文字の変数はどこで許可されますか?

1文字の変数を許可する場所がいくつかあります。通常、これらは単純なループインデクサーであり、OR X、Y、Z座標などの数学的概念です。それ以外は決して!コード)。

名前にはどのくらいの情報を入れますか?

変数が何に使用されているかを正確に知るのに十分です。ロバートマーチンが言うように:

変数、関数、またはクラスの名前は、すべての大きな質問に答える必要があります。なぜ存在するのか、何をするのか、そしてどのように使用されるのかを教えてくれるはずです。名前にコメントが必要な場合、その名前はその意図を明らかにしません。 クリーンコードから-アジャイルソフトウェア職人技のハンドブック

3
AshtonKJ

もちろん、コードが本当に使い捨てでない限り、fooやbarのような意味のない変数名を使用することはありません。

ループ変数の場合、ファイル内の変数を検索しやすくするために、文字を2倍にします。例えば、

for (int ii=0; ii < array.length; ii++)
{
    int element = array[ii];
    printf("%d", element);
}
2
Randy Stegbauer

変数に名前を付けるためにどのルールを使用しますか?すべての重要な変数にはキャメルケース、すべてのクラスにはキャメルケース

1文字のvarはどこで許可されますか?ループ構造および1文字のvar名が数学的な定義と一致する数学関数。

名前にはどのくらいの情報を入れますか?本のようにコードを読むことができるはずです。関数名は、関数が何をするかを教えてくれるはずです(scalarProd()、addCustomer()など)

たとえばコードはどうですか?

あなたが好む意味のない変数名は何ですか?(fooとbarの後) temp、tmp、input、私は実際にfooとbarを使用することはありません。

1
Alexander K

変数に名前を付けるためにどのようなルールを使用しますか? 単語(load_vars)、キャメルケース(loadVars)、スペースなし(loadvars)の間でアンダースコアを切り替えました。クラスは常にキャメルケースで大文字になります。

一文字の変数はどこで許可されますか? 主にループします。使い捨てコードの一時変数。

名前にはどのくらいの情報を入れますか? 私がコーディングしている間、それが何であるかを私に思い出させるのに十分です。 (はい、これは後で問題につながる可能性があります!)

好みの無意味な変数名は何ですか? (foo&barの後) temp、res、r。私は実際にはfooとbarをあまり使用していません。

1
Claudiu

私が守るルールは次のとおりです。

名前は、変数が何を表すかを完全かつ正確に説明していますか?

名前は、プログラミング言語のソリューションではなく、実際の問題を指していますか?

名前は、パズルを解く必要がないほど長いですか?

名前の最後に計算値修飾子がありますか?

それらは、一度必要になった時点でのみ具体的にインスタンス化されますか?

1
CaRDiaK

変数に名前を付けるためにどのようなルールを使用しますか?

  • 1年後には理解できるようになる必要があります。また、既存のスタイルに準拠する必要があります。

一文字の変数はどこで許可されますか?

  • 超自明なこと。例えば。 char c; c = getc();ループインデックス(i、j、k)。

名前にはどのくらいの情報を入れますか?

  • たっぷりとたくさん。

たとえばコードはどうですか?

  • 同上。

好みの無意味な変数名は何ですか? (foo&barの後)

  • 意味のない変数名を持つのは好きではありません。変数が何も意味しない場合、なぜそれが私のコードにあるのですか?

なぜFUBARではなく「foo」と「bar」と綴られているのですか

  • 伝統。
1
Paul Nathan
  1. 内容を明確に説明する変数を使用します。クラスが大きくなる場合、またはクラスがパブリックスコープ内にある場合は、変数名をより正確に記述する必要があります。もちろん、適切な名前を付けると、あなたや他の人がコードをよりよく理解できるようになります。
    • 例:「number」だけの代わりに「employeeNumber」を使用します。
    • ボタンを参照する変数の名前の最後にBtnまたはButtonを使用します。
  2. 変数を小文字で開始し、クラスを大文字で開始します。
    • クラス「MyBigClass」の例、変数「myStringVariable」の例
  3. 読みやすくするために、大文字を使用して新しい単語を示します。 「_」は見た目が悪く、書き込みに時間がかかるため、使用しないでください。
    • 例:「employeeName」を使用します。
  4. ループでは単一文字の変数のみを使用してください。
0
user2650087

私はMathCADで働いていますが、MathCADを使用すると名前を付ける際に判読できない可能性があり、それらを頻繁に使用するので満足しています。そして、これなしではプログラミングの仕方がわかりません。ある変数を別の変数と区別するには、名前に多くの情報を含める必要があります。次に例を示します。

1.そもそも-つまり、量は-N、力はFなどです。

2.2番目の-追加のインデックス-たとえば力の方向

3. 3番目の-ベクトルまたは行列var内のインデックス付け、便宜上、var名を{}または[]括弧で囲んでその次元を示します。

したがって、結論として、私の変数名はN.dirs/Fx i.row/{F} .w。(i、j.k)/ {F} .w。(k、i.j)のようになります。ベクトル値{F}。{GCS} .w。(i、j.k)/ {F}。{LCS} .w。(i、j.k)の座標系の名前を追加する必要がある場合があります

そして最後のステップとして、MathCADには関数のヘルプ文字列がないため、外部関数の最後にBOLDで外部モジュールの名前を追加するか、Row.MTX.f([M])のような変数を追加します。

0
Igor Fomenko

変数に名前を付ける方法はほとんど重要ではありません。言語で指定されたルール、または少なくともコンパイラーによって適用されたルール以外のルールは実際には必要ありません。

チームメイトが理解できると思う名前を選ぶのは礼儀正しいと考えられていますが、スタイルルールは人々が考えるほどそれを助けません。

0
Mnebuerquo

できるだけ明確に名前を付けてみてください。 1文字の変数は絶対に使用せず、何かをテストするだけで(インタラクティブモードなど)、本番環境で使用しない場合にのみ「foo」と「bar」を使用してください。

0
Chris Bunch

ローカル:fooBar;メンバー/タイプ/関数FooBarインターフェース:IFooBar

私の場合、1文字は名前がクラシックな場合にのみ有効です。 i/j/kはローカルループインデックスのみ、x、y、zはベクトル部分。

varsには意味を伝える名前がありますが、行を折り返さないほど短いです

foo、bar、baz。ピクルスもお気に入りです。

0
BCS

変数の前に、str = String、int = Integer、bool = Booleanなどのプレフィックスを付けるのが好きです。

ループでは、1文字をすばやく簡単に使用できます。Fori= 0〜4 ...ループ

変数は、使用しているものの短いが説明的な代替となるように作成されています。変数が短すぎると、その目的が理解できない場合があります。長すぎると、5を表す変数を永久に入力することになります。

Foo&Barは、コードの例として使用され、コードがどのように機能するかを示します。代わりに、ほぼすべての無意味な文字を使用できます。私は通常、i、x、yを使用します。

Foob​​arとfubarについての私の個人的な意見は、それはあまりにも明白であり、2文字の変数が好きな人はいないということです。

0
JFV

私は請負業者として働いており、さまざまな会社やプロジェクト間を移動しているため、カスタムの命名規則は避けたいと思っています。それらは、新しい開発者または保守開発者が、使用されている標準に精通する(そして従う)ことをより困難にします。

したがって、それらの中に同意できない点を見つけることができますが、一貫した命名規則のセットについては 公式のMicrosoft Netガイドライン に注目します。

いくつかの例外(ハンガリアン記法)を除いて、一貫した使用法は、任意のルールセットよりも役立つと思います。つまり、毎回同じようにします。

0
DOK

DSLやその他の流暢なインターフェースでは、変数名とメソッド名が一緒になって字句エンティティを形成することがよくあります。たとえば、私は個人的に、動詞がメソッド名ではなく変数名に入れられる(明らかに異端の)命名パターンが好きです。 @see 変数命名の6番目のルール

また、コードのメイン変数の変数名として$を質素に使用するのも好きです。たとえば、ツリー構造をきれいに出力するクラスは、StringBuffer instvarに$を使用できます。 @see これは詳細です!

それ以外の場合は、EinarHoestによるProgrammer'sPhrasebookを参照します。 @see http://www.nr.no/~einarwh/phrasebook/

0
akuhn

私は常にforループで1文字の変数を使用しますが、見た目が良く、読みやすくなっています。

その多くはプログラミングしている言語にも依存します。C++では変数にJava(Java $ ===)と同じ名前を付けません(Javaは過度に長い変数名に適しています) imoですが、これは個人的な好みかもしれません。あるいは、Javaビルトインの名前...)と関係があるかもしれません。

0
HappyCodeMonkey

VB3の時代には、1文字の変数名を使用しないことを学びました。問題は、変数が使用されているすべての場所を検索する場合、1文字で検索するのが少し難しいことです。

Visual Studioの新しいバージョンには、この問題を回避するインテリジェントな変数検索機能がありますが、古い習慣などがあります。とにかく、私はばかげている側で誤りを犯すことを好みます。

for (int firstStageRocketEngineIndex = 0; firstStageRocketEngineIndex < firstStageRocketEngines.Length; firstStageRocketEngineIndex++)
{
  firstStageRocketEngines[firstStageRocketEngineIndex].Ignite();
  Thread.Sleep(100);  // Don't start them all at once. That would be bad.
}
0