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。
1文字の変数はどこで許可されますか?私はこれをforループで行う傾向がありますが、そうするたびに少し罪悪感を感じます。しかし、foreachとlambdaの場合、ループの式は今ではそれほど一般的ではありません。
名前にはどのくらいの情報を入れますか?コードが少しわかりにくい場合はコメントを書いてください。変数名をコメントに変えないでください。 int theTotalAccountValueIsStoredHere
必須ではありません。
好みの無意味な変数名は何ですか?(foo&barの後) iまたはx。 fooとbarは、私にとっては少し大学の教科書の例です。
なぜFUBARではなく「foo」と「bar」と綴られているのですか?伝統
これらはすべて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
と呼ばれる理由があり、多くの考慮が払われましたが、この特定のコードには適用されません。そのためです。コメントがあります。)変数名?誰も気にしない?
for(int i = 0; i< endPoint; i++) {...} int max( int a, int b) { if (a > b) return a; return b; }
広く使用されていたほとんどすべての現代語には、独自のコーディング標準があります。これらは素晴らしい出発点です。他のすべてが失敗した場合は、推奨されているものを使用してください。もちろん例外もありますが、これらは一般的なガイドラインです。チームが特定のバリエーションを好む場合は、それらに同意する限り、それでも問題ありません。
しかし、結局のところ、それは必ずしもあなたがどの基準を使用するかではなく、そもそもあなたがそれらを持っていて、それらが守られているという事実です。
変数に名前を付けるためにどのルールを使用しますか?
通常、私はC#開発者であるため、2つの理由から、 IDesign C#コーディング標準 で指定されている変数の命名規則に従います。
1)気に入って、読みやすいです。 2)これは Visual Studio 2005/2008用のコードスタイルエンフォーサーアドイン に付属しているデフォルトであり、最近広く使用しています。
1文字の変数はどこで許可されますか?
1文字の変数を許可する場所がいくつかあります。通常、これらは単純なループインデクサーであり、OR X、Y、Z座標などの数学的概念です。それ以外は決して!コード)。
名前にはどのくらいの情報を入れますか?
変数が何に使用されているかを正確に知るのに十分です。ロバートマーチンが言うように:
変数、関数、またはクラスの名前は、すべての大きな質問に答える必要があります。なぜ存在するのか、何をするのか、そしてどのように使用されるのかを教えてくれるはずです。名前にコメントが必要な場合、その名前はその意図を明らかにしません。 クリーンコードから-アジャイルソフトウェア職人技のハンドブック
もちろん、コードが本当に使い捨てでない限り、fooやbarのような意味のない変数名を使用することはありません。
ループ変数の場合、ファイル内の変数を検索しやすくするために、文字を2倍にします。例えば、
for (int ii=0; ii < array.length; ii++)
{
int element = array[ii];
printf("%d", element);
}
変数に名前を付けるためにどのルールを使用しますか?すべての重要な変数にはキャメルケース、すべてのクラスにはキャメルケース
1文字のvarはどこで許可されますか?ループ構造および1文字のvar名が数学的な定義と一致する数学関数。
名前にはどのくらいの情報を入れますか?本のようにコードを読むことができるはずです。関数名は、関数が何をするかを教えてくれるはずです(scalarProd()、addCustomer()など)
たとえばコードはどうですか?
あなたが好む意味のない変数名は何ですか?(fooとbarの後) temp、tmp、input、私は実際にfooとbarを使用することはありません。
変数に名前を付けるためにどのようなルールを使用しますか? 単語(load_vars)、キャメルケース(loadVars)、スペースなし(loadvars)の間でアンダースコアを切り替えました。クラスは常にキャメルケースで大文字になります。
一文字の変数はどこで許可されますか? 主にループします。使い捨てコードの一時変数。
名前にはどのくらいの情報を入れますか? 私がコーディングしている間、それが何であるかを私に思い出させるのに十分です。 (はい、これは後で問題につながる可能性があります!)
好みの無意味な変数名は何ですか? (foo&barの後) temp、res、r。私は実際にはfooとbarをあまり使用していません。
私が守るルールは次のとおりです。
名前は、変数が何を表すかを完全かつ正確に説明していますか?
名前は、プログラミング言語のソリューションではなく、実際の問題を指していますか?
名前は、パズルを解く必要がないほど長いですか?
名前の最後に計算値修飾子がありますか?
それらは、一度必要になった時点でのみ具体的にインスタンス化されますか?
変数に名前を付けるためにどのようなルールを使用しますか?
一文字の変数はどこで許可されますか?
名前にはどのくらいの情報を入れますか?
たとえばコードはどうですか?
好みの無意味な変数名は何ですか? (foo&barの後)
なぜFUBARではなく「foo」と「bar」と綴られているのですか
私は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])のような変数を追加します。
変数に名前を付ける方法はほとんど重要ではありません。言語で指定されたルール、または少なくともコンパイラーによって適用されたルール以外のルールは実際には必要ありません。
チームメイトが理解できると思う名前を選ぶのは礼儀正しいと考えられていますが、スタイルルールは人々が考えるほどそれを助けません。
できるだけ明確に名前を付けてみてください。 1文字の変数は絶対に使用せず、何かをテストするだけで(インタラクティブモードなど)、本番環境で使用しない場合にのみ「foo」と「bar」を使用してください。
ローカル:fooBar;メンバー/タイプ/関数FooBarインターフェース:IFooBar
私の場合、1文字は名前がクラシックな場合にのみ有効です。 i/j/kはローカルループインデックスのみ、x、y、zはベクトル部分。
varsには意味を伝える名前がありますが、行を折り返さないほど短いです
foo、bar、baz。ピクルスもお気に入りです。
変数の前に、str = String、int = Integer、bool = Booleanなどのプレフィックスを付けるのが好きです。
ループでは、1文字をすばやく簡単に使用できます。Fori= 0〜4 ...ループ
変数は、使用しているものの短いが説明的な代替となるように作成されています。変数が短すぎると、その目的が理解できない場合があります。長すぎると、5を表す変数を永久に入力することになります。
Foo&Barは、コードの例として使用され、コードがどのように機能するかを示します。代わりに、ほぼすべての無意味な文字を使用できます。私は通常、i、x、yを使用します。
Foobarとfubarについての私の個人的な意見は、それはあまりにも明白であり、2文字の変数が好きな人はいないということです。
私は請負業者として働いており、さまざまな会社やプロジェクト間を移動しているため、カスタムの命名規則は避けたいと思っています。それらは、新しい開発者または保守開発者が、使用されている標準に精通する(そして従う)ことをより困難にします。
したがって、それらの中に同意できない点を見つけることができますが、一貫した命名規則のセットについては 公式のMicrosoft Netガイドライン に注目します。
いくつかの例外(ハンガリアン記法)を除いて、一貫した使用法は、任意のルールセットよりも役立つと思います。つまり、毎回同じようにします。
。
DSLやその他の流暢なインターフェースでは、変数名とメソッド名が一緒になって字句エンティティを形成することがよくあります。たとえば、私は個人的に、動詞がメソッド名ではなく変数名に入れられる(明らかに異端の)命名パターンが好きです。 @see 変数命名の6番目のルール
また、コードのメイン変数の変数名として$
を質素に使用するのも好きです。たとえば、ツリー構造をきれいに出力するクラスは、StringBuffer instvarに$
を使用できます。 @see これは詳細です!
それ以外の場合は、EinarHoestによるProgrammer'sPhrasebookを参照します。 @see http://www.nr.no/~einarwh/phrasebook/
私は常にforループで1文字の変数を使用しますが、見た目が良く、読みやすくなっています。
その多くはプログラミングしている言語にも依存します。C++では変数にJava(Java $ ===)と同じ名前を付けません(Javaは過度に長い変数名に適しています) imoですが、これは個人的な好みかもしれません。あるいは、Javaビルトインの名前...)と関係があるかもしれません。
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.
}