はじめに
皆さんもプログラミングを学び始めた際に、こう思ったのではないでしょうか。
配列のインデックスってなんで 0 から始まるの??
僕もそのような疑問を抱いた覚えがあります。
なんとなく、 配列とはそうゆうものだ。 と片付けている方も多いのではないでしょうか。
この機会に是非、配列の歴史を学んでみましょう。
初めの頃は 1 だった
配列という概念を持つ最も古い言語は FORTRAN と言われています。
Fortran は1950年代に誕生した、世界初の高級プログラミング言語です。
Fortran は "FORmula TRANslation" の略です。
この FORTRAN という言語は 1 に基づく配列を採用していました。
後に COBOL, BASIC, R, Lua などの言語も、1 に基づく配列を採用するようになりました。
C言語の登場
C言語の登場により、ポインタ演算には 0 から始まる配列 (zero-based index) の方が使いやすいのではないかという認識が生まれました。
ポインタ型データは、メモリ上にあるオブジェクトの位置(メモリアドレス)を意味しています。
この「メモリアドレス」は0から始まる整数値であり、ポインタ型データと整数データの間で加減算を行うことで必要なメモリアドレスを計算できるようになっています
これらのメリットを踏まえ、C言語で初めて 0 から始まる配列が採用されることになります。
以降、様々な言語で 0 から始まる配列 (zero-based index) が採用される事となりました。
0 or 1 の戦い
とはいえ、現在も様々な議論が行われおり、 0 から始まる配列と 1 から始まる配列のメリデメに関して様々な意見を耳にします。
よく話題に上がる文献としては、オランダ人の計算機科学者であり、チューリング賞を受賞者でもある、エドガー・ダイクストラ先生の Why numbering should start at zero があるので興味のある方は読んでみてください。
まとめ
以上、軽くまとめてみましたが、どちらが優れているかという論題になってしまうと、僕も混乱してしまうのが本音です。
とはいえ、なぜ 0 から始める配列が生まれたかを学ぶことで、身近な初心者のモヤモヤを晴らす手助けが出来たらと思います。
参考にさせて頂いた文献には更に詳しい解説が載っているので、興味のある方は是非読んでみてください。
参考文献
Why do array indexes start with 0 (zero) in many programming languages?
Why numbering should start at zero
Zero-based numbering