オリジン

オリジン（）とは、原点のことで、主に0オリジンと1オリジンが存在する。0オリジンのものは0から数え始め、1オリジンのものは1から数え始める。なお、0オリジンや1オリジンは和製英語で、英語ではやなどという。

 オリジンの混在 
複数のオリジンが混在する身近な例として、日時があげられる。年・月・日は1オリジン（数え初めが1年1月1日）であるが、時・分・秒は0オリジン（0時0分0秒）である。時については0時のことを12時ということもあるため紛らわしいが、0時が午前と午後の境であるために0オリジンであるといえる。ただし、期間を表す場合はすべて0オリジンとなる。

世紀の数え方は1オリジンと考えられる。つまり、紀元1年は1世紀であり、0年や0世紀は存在しない（紀元前1年の直後は紀元1年となる）。ただし天文学的紀年法では0オリジンで年を数える。

また、年齢の数え方として満年齢と数え年がある。ほかにも違いがあるが、それぞれの特徴として満年齢は0オリジンであり、数え年は1オリジンであることがあげられる。

 プログラミング言語 
プログラミング言語やそのライブラリ・API類では、両方が存在する。特に言語によって配列の先頭要素のインデックスが0なのか1なのかはよく議論になる。配列では、C言語などは0オリジンであり、FORTRANやLuaなどは1オリジンである。BASICのように複数回の標準化でオリジンの標準が変わったという言語もある（特に2回目の標準化ではデフォルトの1オリジンから0オリジンに変更できるようになった。そのためVisual Basicなど現代的なBASICは両対応である）。また日付を扱うライブラリを例にすると、月日を直感的な1オリジンで扱うか、算術的に便利な0オリジンで扱うか、どちらにも得失があり、さらに混在していることもあるので表示用の換算の際には注意を要するtm - cppreference.com。

 VB/VBAでのオリジンの指定 
以下はVisual Basic for Applicationsでオリジンを指定する例である。

Option Explicit
Option Base 1    ' 1オリジンに指定

Sub Foo()
    Dim bar(2) As Integer
    bar(0) = 1   ' 1オリジンの場合のみランタイムエラーが発生する
End Sub

なお、VB/VBAと異なり、Visual Basic .NET (VB.NET) にはこのOption Base機能が存在しない連載：プロフェッショナルVB.NETプログラミング入門 第2回 データ型の処理（4/6） - ＠IT。C#のような他の.NET言語と同様、0オリジンのみをサポートする。

 脚注 
 出典 

 参考文献 

 関連項目 

 原点
 ナンバリング
 プログラミング言語

Category:プログラミング言語の概念
Category:プログラミング言語デザイン
Category:座標
Category:0