それはかなり魔法です。
つまり、なぜ6番目の要素にアクセスしているのですか?その数に適用されるべきセマンティクスは何ですか?現状では、私たちが知っているのは「6番目の(ゼロベースの)数値」だけです。の宣言を知っていれば、arrayOfNumbers
そのタイプ(たとえば、int
またはdouble
)もさらにわかります。
しかし、あなたが言った場合:
arrayOfNumbers[kDistanceToSaturn];
...今では、コードを読んでいる人にとってははるかに意味があります。
一般に、配列の長さがわからず、ハードコードされた方法で配列にアクセスすることはできないため、配列を反復処理して、各要素に対して何らかの操作を実行します。
ただし、グラフィックプログラミングなどでは、配列要素に特定の意味がある場合があります。データが要求するため、配列が常に同じサイズになる場合があります(特定の変換行列など)。このような場合、特定の要素に番号でアクセスできる場合とできない場合があります。ドメインの専門家はあなたが何をしているのかを知っていますが、ジェネラリストはおそらく知らないでしょう。マジックインデックス番号に名前を付けると、コードを管理しなければならない人にとってわかりやすくなり、誤って間違ったコードを入力するのを防ぐことができます。
上記の例では、配列が太陽から惑星までの距離を保持していると仮定しました。太陽は0番目の要素であるため、arrayOfNumbers [kDistanceToSun] = 0です。次に、増分すると、各要素には、水星、金星など、次に遠い惑星までの距離が含まれます。これは、単に数字を入力するよりもはるかに読みやすくなります。あなたが望む惑星。この場合、惑星の数が固定されているため、配列のサイズは固定されています(冥王星の大失敗全体を除いて)。
もう1つの問題は、「arrayOfNumbers」が配列の内容について何も教えてくれないことです。あなたが言った場所、またはあなたがそれを宣言した場所のどこかで宣言を見たので、私たちはすでにその数字の配列を知っていますint arrayOfNumers[12345];
。代わりに、次のようなものです。
int distanceToPlanetsFromSol[kNumberOfPlanets];
...データが実際に何であるか、およびそのセマンティクスが何であるかについて、はるかに優れたアイデアを提供します。プログラマーとしての目標の1つは、この方法で自己文書化するコードを作成することです。
そして、kNumberOfPlanets
8か9かは他の場所で議論することができます:)