- 変数に名前を付けるためにどのような規則を使用していますか?
- 1 文字の変数はどこで使用できますか?
- 名前にどのくらいの情報を入れますか?
- たとえば、コードはどうですか?
- 無意味な変数名で好きなものは何ですか? (foo & bar の後)
- なぜFUBARではなく「foo」や「bar」と綴られるのか
24 に答える
function startEditing(){
if (user.canEdit(currentDocument)){
editorControl.setEditMode(true);
setButtonDown(btnStartEditing);
}
}
物語作品のように読まなければならない。
私が常に従うルールの1つは、これです。変数が特定の単位の値をエンコードする場合、それらの単位は変数名の一部である必要があります。例:
int postalCodeDistanceMiles;
decimal reactorCoreTemperatureKelvin;
decimal altitudeMsl;
int userExperienceWongBakerPainScale
私は火星着陸船の墜落(または私の退屈なCRUDビジネスアプリケーションでの同等の失敗)について責任を負いません。
それはすべて、開発している言語によって異なります。私は現在 C# を使用しているため、以下を使用する傾向があります。
変数のキャメルケース。
パラメータのキャメルケース。
プロパティの PascalCase。
メンバー変数の m_PascalCase。
一文字変数はどこで許可されますか? 私はこれを for ループで行う傾向がありますが、そうするたびに少し罪悪感を覚えます。しかし、ループの foreach とラムダ式を使用することは、今ではあまり一般的ではありません。
名前にどのくらいの情報を入れますか?
コードを理解するのが少し難しい場合は、コメントを書いてください。変数名をコメントに変えないでください。
int theTotalAccountValueIsStoredHere
必須ではありません。
無意味な変数名の好みは? (foo & bar の後) i または x。foo と bar は、私にとって大学の教科書の例にすぎません。
なぜ FUBAR ではなく「foo」や「bar」と綴られるのですか? 伝統
これらはすべて C# の規則です。
変数名の大文字と小文字
ケースはスコープを示します。Pascal ケースの変数は、所有するクラスのフィールドです。キャメル ケースの変数は、現在のメソッドに対してローカルです。
接頭辞の規則は 1 つだけです。クラス プロパティのバッキング フィールドは Pascal 形式で、先頭にアンダースコアが付きます。
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 つの場所は、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
ではありませんが、この特定のコードには適用されないため、コメントがあります。) 変数名? 誰も気にしない?
広く使用されているほとんどすべての現代言語には、独自のコーディング標準があります。これらは素晴らしい出発点です。他のすべてが失敗した場合は、推奨されているものを使用してください。もちろん例外もありますが、これらは一般的なガイドラインです。チームが特定のバリエーションを好む場合は、それらに同意する限り、それでも問題ありません。
しかし、結局のところ、それは必ずしもあなたがどの基準を使用するかではなく、そもそもあなたがそれらを持っていて、それらが守られているという事実です。
- ループ制御または非常に短い関数には、1 文字の変数のみを使用します。
for(int i = 0; i< endPoint; i++) {...} int max( int a, int b) { if (a > b) return a; return b; }
- 情報の量は変数のスコープに依存し、使用できる場所が多ければ多いほど、その目的を追跡するために名前を付けたいと思う情報が多くなります。
- サンプル コードを書くときは、実際のコードと同じように変数名を使用するようにしています (ただし、関数には foo や bar などの役に立たない名前が付けられる場合があります)。
- 「ふー」の語源を見る
変数に名前を付けるためにどのような規則を使用していますか?
通常、私は C# 開発者であるため、2 つの理由からIDesign C# コーディング標準で指定されている変数の命名規則に従います。
1) 私はそれが好きで、読みやすいと思います。2) これは、私が最近よく使用するVisual Studio 2005 / 2008 用の Code Style Enforcer AddIn に付属するデフォルトです。
一文字変数はどこで許可されますか?
1 文字の変数を許可する場所がいくつかあります。通常、これらは単純なループ インデクサー、または X、Y、Z 座標などの数学的概念です。それ以外は絶対に!(私がそれらを使用した他の場所では、コードを読み直すときに通常、それらに噛まれました)。
名前にどのくらいの情報を入れますか?
変数が何に使用されているかを正確に知るには十分です。ロバート・マーティンが言うように:
変数、関数、またはクラスの名前は、すべての大きな質問に答える必要があります。なぜ存在するのか、何をするのか、どのように使われるのかを説明する必要があります。名前にコメントが必要な場合、その名前はその意図を明らかにしません。From Clean Code - アジャイル ソフトウェア クラフトマンシップのハンドブック
もちろん、コードが本当に使い捨てでない限り、私は foo や bar のような無意味な変数名を決して使用しません。
ループ変数の場合は、ファイル内で変数を検索しやすいように文字を 2 倍にします。例えば、
for (int ii=0; ii < array.length; ii++)
{
int element = array[ii];
printf("%d", element);
}
変数に名前を付けるためにどのようなルールを使用しますか?
- 一年後には理解できるようになる必要があります。また、既存のスタイルに準拠する必要があります。
一文字の変数はどこで許可されますか?
- 超自明なこと。例:char c; c = getc(); ループインデックス(i、j、k)。
名前にはどのくらいの情報を入れますか?
- たっぷりとたくさん。
たとえばコードはどうですか?
- 同上。
あなたの好きな無意味な変数名は何ですか?(foo&barの後)
- 意味のない変数名を持つのは好きではありません。変数が何も意味しない場合、なぜそれが私のコードにあるのですか?
なぜ彼らはFUBARではなく「foo」と「bar」と綴られているのですか
- 伝統。
変数に名前を付けるためにどのような規則を使用していますか? すべての重要な変数のキャメルケース、すべてのクラスのキャメルケース
一文字変数はどこで許可されますか? 単一文字の var 名が数学的な定義と一致するループ構成および数学関数内。
名前にどのくらいの情報を入れますか? 本のようにコードを読むことができるはずです。関数名は、関数が何をするかを示す必要があります (scalarProd()、addCustomer() など)。
たとえば、コードはどうですか?
無意味な変数名の好みは? (foo と bar の後) temp、tmp、input、私は foo と bar を実際には使用しません。
変数に名前を付けるためにどのような規則を使用していますか? 単語間のアンダースコア (load_vars)、キャメル ケーシング (loadVars)、スペースなし (loadvars) を切り替えました。クラスは常に大文字のキャメルケースです。
一文字変数はどこで許可されますか? ほとんどの場合、ループします。使い捨てコードの一時変数。
名前にどのくらいの情報を入れますか?コーディング中にそれが何であるかを思い出すには十分です。(はい、これは後で問題につながる可能性があります!)
無意味な変数名の好みは? (foo & bar の後) temp, res, r. 私は実際には foo と bar をあまり使いません。
私が遵守する規則は次のとおりです。
名前は、変数が表すものを完全かつ正確に表していますか?
名前は、プログラミング言語のソリューションではなく、実際の問題を指していますか?
パズルを解く必要がないほど長い名前ですか?
名前の末尾に計算値修飾子がある場合、それはありますか?
一度必要になった時点でのみ具体的にインスタンス化されていますか?
私は、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.
}
地元の人: fooBar; メンバー/タイプ/関数 FooBar インターフェイス: IFooBar
私に関しては、名前が古典的な場合にのみ 1 文字が有効です。i/j/k はローカル ループ インデックスのみ、x、y、z はベクトル部分です。
vars には意味を伝える名前がありますが、行を折り返さないほど短い名前です
フー、バー、バズ。ピクルスも大好物。
変数の前に、変数がどうなるかというプレフィックスを付けるのが好きです: str = String、int = Integer、bool = Boolean など。
ループでは、単一の文字を使用するとすばやく簡単に使用できます。i = 0 から 4 の場合...ループ
変数は、使用しているものの短いが説明的な代替になるように作られています。変数が短すぎると、それが何のためにあるのか理解できなくなる可能性があります。長すぎると、5 を表す変数を永遠に入力することになります。
Foo & Bar は、コードがどのように機能するかを示すためのサンプル コードとして使用されます。代わりに、ほぼすべての無意味な文字を使用できます。私は通常、i、x、および y を使用します。
foo bar と fu bar の比較についての私の個人的な意見は、あまりにも明白であり、2 文字の変数を好む人はいないということです。3 文字の変数の方がはるかに優れています。
私は請負業者として働いており、さまざまな会社やプロジェクトの間を移動しているため、独自の命名規則は避けたいと思っています。これらは、新しい開発者や保守開発者が、使用されている標準に精通する (そして従う) ことをより困難にします。
そのため、同意できない点を見つけることはできますが、一貫した一連の命名規則については、公式の Microsoft Net ガイドラインを参照してください。
いくつかの例外 (ハンガリー表記) を除いて、一貫した使用法は任意の規則のセットよりも役立つと思います。つまり、毎回同じようにします。
.
できるだけ明確に名前を付けてみてください。1 文字の変数は決して使用せず、'foo' と 'bar' のみを使用するのは、何かをテストするだけで (たとえば、対話モードで)、それを運用環境で使用しない場合に限ってください。
DSL やその他の流暢なインターフェースでは、多くの場合、変数名とメソッド名が一緒になって字句エンティティを形成します。たとえば、私は個人的に、動詞がメソッド名ではなく変数名に入れられる (明らかに異端の) 命名パターンが好きです。@See変数命名規則第6条
また、$
コードのメイン変数の変数名としての質素な使用も気に入っています。たとえば、ツリー構造をきれいに出力するクラスは$
、StringBuffer inst var に使用できます。@seeこれは冗長です!
それ以外の場合は、Einar Hoest による Programmer's Phrasebook を参照します。@see http://www.nr.no/~einarwh/phrasebook/
私は常に for ループで 1 文字の変数を使用します。見た目が良く、読みやすいというだけです。
その多くは、プログラミングしている言語にも依存します。Java と同じように C++ で変数に名前を付けることはありません (Java は、過度に長い変数名 imo に適していますが、これは個人的な好みにすぎない可能性があります。 . または、Java ビルトインの命名方法に関係している可能性があります...)。
- 含まれるものを明確に説明する変数を使用します。クラスが大きくなる場合、または public スコープにある場合は、変数名をより正確に記述する必要があります。もちろん、良いネーミングは、あなたや他の人々がコードをよりよく理解できるようにします。
- たとえば、「数字」の代わりに「employeeNumber」を使用します。
- ボタンを参照する変数の名前の末尾には Btn または Button を使用し、文字列には str などを使用します。
- 変数は小文字で開始し、クラスは大文字で開始します。
- クラス「MyBigClass」の例、変数「myStringVariable」の例
- 読みやすくするために、大文字を使用して新しい単語を示します。「_」は見栄えが悪く、書き込みに時間がかかるため、使用しないでください。
- 例: 「employeeName」を使用します。
- ループでは単一文字変数のみを使用してください。
変数に名前を付ける方法はほとんど重要ではありません。言語によって指定されたルール、または少なくともコンパイラによって強制されたルール以外のルールは本当に必要ありません。
チームメイトが理解できると思う名前を選ぶのは礼儀正しいと考えられていますが、スタイル ルールは人々が考えるほど実際には役に立ちません。
更新しました
まず、名前付けは、言語、フレームワーク、ライブラリ、またはプロジェクトの既存の規則に依存します。(ローマにいるとき...) 例: jQuery プラグインにはjQuery スタイルを使用し、 iOS アプリにはApple スタイルを使用します。前者の例はより注意を払う必要があります (JavaScript は混乱する可能性があり、自動的にチェックされないため)。一方、後者の例は、標準が十分に施行され、遵守されているため、より単純です。リーダー、コミュニティ、特にツールに依存する YMMV。
既存の規則に従うために、命名の習慣をすべて脇に置きます。
一般的に、私はこれらの原則に従います。これらの原則はすべて、書き言葉による対人コミュニケーションの別の形態であるプログラミングを中心にしています。
読みやすさ - 重要な部分には明確な名前を付ける必要があります。しかし、これらの名前は、意図の適切な文書化に代わるものであってはなりません。コードの読みやすさのテストは、数か月後に戻ってきて、最初の印象ですべてを放り出さないほど十分に理解できるかどうかです。これは省略を避けることを意味します。ハンガリー語表記に対するケースを参照してください。
書き込み可能性- 共通領域とボイラープレートはシンプルに保つ必要があります (特に IDE がない場合)。これにより、コードをより簡単に楽しく書くことができます。これは、 Rob Pyke のスタイルに少し影響を受けています。
保守性- のように自分の名前に型を追加すると、そのプロパティをを拡張するクラス
arrItems
のインスタンスに変更すると最悪です。タイプ ノートは、適切な場合 (API など) にのみドキュメントに保存する必要があります。CustomSet
Array
標準的な一般的な命名- ダム環境 (テキスト エディター) の場合: クラスは に
ProperCase
、変数は短く、必要に応じて にsnake_case
、関数は にしcamelCase
ます。
JavaScript の場合、これは言語の制約と名前付けに影響を与えるツールの典型的なケースです。他のボイラープレートがあなたのビジョンを覆い隠し、差別化スキルを混乱させている間this
、あなたの手を握るIDEがないので、異なる命名によって変数と関数を区別するのに役立ちます. prototype
また、スコープ内の重要でない、またはグローバルに派生したすべての変数が省略されることも珍しくありません。この言語には がないimport [path] as [alias];
ため、ローカル変数がエイリアスになります。そして、さまざまな空白の規則がたくさんあります。ここで (そして実際にはどこでも) 唯一の解決策は、意図 (および身元) を適切に文書化することです。
また、言語自体は関数レベルのスコープとクロージャーに基づいているため、2 つ以上のスコープ レベルの変数を含むブロックが非常に複雑に感じられるほどの柔軟性があるため_
、スコープ チェーンの各レベルの前に が付加されている場所に名前を付けるのを見てきました。そのスコープ内の変数。
私は最近多くのphpを実行していますが、必ずしもそうとは限りませんでした。変数の命名に関しては、いくつかのトリックを学びました。
//これは私の文字列変数です$strVar= "";
//これは配列を表します$arrCards= array();
//これは整数の場合$intTotal= NULL:
//オブジェクト$objDB= new database_class();
// boolean $ blValid = true;