配列インデックスを常にゼロから開始することには利点があります。これは慣例の問題ですが、私の経験では、特に[a, b)
. そのような間隔の長さは ですb - a
。式には s が含まれていないので1
、それらを入れるのを忘れることはできません。間隔[0, length)
は配列全体です。繰り返しますが、1
s は必要ありません。のようなオフセットも s[x, x + sublen)
を必要としません1
。1 ベースのインデックスではx1
、 、x2
、などのオフセットを組み合わせるには、x3
を慎重に処理する必要があり1
ます。
これらの機能の一部は、上に近い間隔で 1 ベースのインデックス作成で取得できますが、すべてが取得できるわけではありません。ほとんどの C、Python、Java などのように、フレームワーク全体がゼロから始まるインデックス、closed-below、open-above 規則を採用すると、すべての関数呼び出しで欠落+ 1
やエラーについて考えるのを喜んで避けることができます。- 1
は大きな助けになります。
Fortran では、インデックスに任意の基数 (0、1、-5 など) を使用する選択肢があったことを覚えています。これが役立ついくつかのケース (通常は 0 を中心にインデックスを対称にする場合) では、関数呼び出しで配列の取得をラップすることで同じ効果を達成できた可能性があります。これらのケースでは、ほとんどの場合、グリッドによる連続変数のモデル化が含まれていたため、グリッド間隔を 1 以外にして、ポイント間を補間したいことがよくありました。そのためには、関数呼び出しでラップする必要がありました。
私は、Matlab があなたに選択肢を与えたことを知りませんでした (Matlab について話しているのですね?) が、Matlab と Fortran の関係を考えると、それは理にかなっています。上記の議論は最適化とは何の関係もありませんが、あなたが正しいことを理解しており、Matlab が未使用のインデックスをある種のプレースホルダーで埋める場合、ゼロベースのインデックス作成もそれを回避します (意図せずにまるで本物であるかのようなプレースホルダー)。