0オリジンと1オリジン

0to10オリジンまたは1オリジンという言葉をご存知でしょうか。
プログラムに詳しい方は知っていると思いますが、ものを数える時に0から数える方式を0オリジン、1から数える方式を1オリジンと言います。

私がこれを知ったのは大学のC言語の授業でした。配列の先頭要素がa[1]でなくa[0]ということを習った時です。最初は違和感を感じましたが慣れると不思議なもので0オリジンが当たり前になります。


例えば10回回すループはforだと

for(i=0; i<10; i++){

で書きます。

for(i=1; i<11; i++){

でもいいかもしれないですがすごく気持ち悪いです。死んでも0オリジンで書き直します!(ループカウンタに特別な意味がある場合は別)

当初は0からものを数えるなんておかしいと思っていましたが、身の回りでも0オリジンはいくつかあります。

例えば満年齢(0歳)、時刻(0時0分0秒)がそうです。1でなく0が基準です。温度も0オリジンと言えるでしょう。ちなみに西暦に0年はないようで”0世紀”も存在しません!知らなかった。

さて、0オリジンと1オリジンが混在して困るときがたまにあります。私の場合はグラフィックデザインをしているときは頭が1オリジンなのですがプログラムを書くときは0オリジンになります。
フォトショなどで10個の同じような画像を作るときは image1.jpg, image2.jpg, …, image10.jpg などと命名することがほとんどです。

ところがJavaScriptなどでそれ切り替えるような処理を実装する場合は image0.jpg, image1.jpg, …, image9.jpg と無意識のうちに0オリジンでコーディングしてしまいます。

コーディング途中で「なんで1オリジンで命名したんだ!」と後悔するのですが、命名したのは数分前の自分なので何も言えません。

これって何なんでしょう。今ふと思ったのが、実家に電話すると無意識に方言に戻りますよね。アレに近い感覚かもしれません。