入れ子のループを作成していて、lとmを変数として使用してforループを制御するようになり、これが非常に混乱する可能性があることに気付きました。コードのブロックをさまざまなレベルにコピーしたとき、すでにいくつかのバグがありました。だから私はi、j、kの代わりにiSomething、iSomethingelseを使うことを考えていました。それで、私が使用する3Dモデルを検討している場合
for(int iMesh=0;iMesh<numMesh;iMesh++)
for(int iVertex=0;iVertex<meshes[iMesh].numVertex;iVertex++)
または、変数Imの名前を繰り返し使用します。
for(int iMeshes
for(int iVerts
それで、これを行うために他の標準または一般的に使用されているプラクティスがあるかどうか疑問に思っていましたか?
編集:これを行うのがOKかどうかではなく、標準があるかどうか疑問に思っています
i、j、kは標準のカウンター変数です。それらを使用することで、ループカウントと他に何もないを維持するために変数が使用されることを意味します。別のより複雑な名前を使用すると、変数が何に使用されるのかが不明確になります。
カウンター変数が混乱している場合は、コードが分割される必要があることを示しています。つまり
for(int i=0;i<numMesh;i++)
foo += CountVerticies(meshes[i]);
標準のループでは、人々はi、j、kを選択するのは簡単であり、多くの状況では意味がないので、i、j、kはすべての開発者に知られている意味があるため、標準にかなり近い。
とにかく、もっと意味のあるものに変更する必要がある場合は、ボブおじさんの本から選んだ次のガイドラインを使用します " Clean Code "この本から他にも考慮すべきことがあることに注意してください。ループする名前に合うと思いました:-
したがって、コードは多かれ少なかれこのようなものになります
for(int cellPointer = 0; cellPointer < 10;cellPointer++)
{
for (int rowPointer = 0; rowPointer < 10; rowPointer++)
{
//do something
}
}
あなたがそれに戻ったとき、あなたはそれを理解できます
インデックスに「意味」がない場合は、i、j、k ...を使用します。
代わりにiプレフィックスのないメッシュ、頂点などを使用しますが、不要なハンガリー語は悪です。
ネストされたループの数が非常に多い場合は、i0、i1、...などを使用することもできますが、3〜4を超えるのは珍しいと思います。
x、y、zは、特に2Dまたは3D座標を扱う場合に役立ちます。
I = xやj = yなどを思い出そうとするビート
i
は、一連の整数を表す数学の標準用語です。
1、2、3 ... i、i + 1、i + 2 ... n。
i
はIntegerを表します(以前の教授の1人によると、他の引用はありません)。したがって、ループの実行中のどの時点でも、それを数学的な観点から呼び出すと正確です。 i
。
カウンター変数の使用に関する問題の1つは、反復の制御ロジックの外では、それらが意味を持たないことです。
あなたの本能は、明確にするため、iVertexを使用する方がiを使用するよりも優れているということです。ただし、 'i'プレフィックスは変数が整数であることを示します。これは、状況によっては有用ですが、最近のIDEではそれほど有用ではありません(これは、いくつかの回答がそれに反対する理由の1つです)。
最善の方法は、変数に含まれる内容に基づいて変数に名前を付けるための一般的なアドバイスです。この場合、変数の変更方法に基づいて変数を考えていますが、それをどのように使用するか、何を表すかは考慮していません。ループカウンターは開始から終了まで増加しますが、制御構造を見るとわかります。より良いオプションは、ループの本体によってどのように消費されるかに基づいて名前を付けることです。この場合、iMeshはメッシュ配列へのインデックスとして使用されるため、「meshId」のようなものを使用します。
使用目的に基づいて名前を付ける理由の1つは、コードの欠陥をより簡単に検出できることです。たとえば、「a = MeshId + 2」と表示された場合は、非常に疑わしいと思います。通常、IDで算術演算を実行するのではなく、インデックス演算(meshes [MeshId])のみを実行するためです。
コーディング標準がありますが、問題はそれらが多すぎることです。詳細については、こちらをお試しください。
http://en.wikipedia.org/wiki/Naming_convention_(programming )