- PR -

配列の添字が0から始まるメリットは?

投稿者投稿内容
なか-chan@最愛のiMac
ぬし
会議室デビュー日: 2002/07/17
投稿数: 385
お住まい・勤務地: 和光市・世田谷区
投稿日時: 2005-03-10 08:45
MechanicalLifeさんこんにちは。

>0からなのは英語の月は January、February、March、・・・で

>getMonth()の値をそのままつかえます。

なるほど。そういうメリットはありますね〜。
ここでも結局、配列が0から始まってるから...
ってことにつながるんですね。
ほろりん
ベテラン
会議室デビュー日: 2004/11/24
投稿数: 98
お住まい・勤務地: あそこ
投稿日時: 2005-03-10 12:30
引用:

なか-chanさんの書き込み (2005-03-08 14:01) より:
0から始まるのは機械の都合
1から始まるのは人間の都合

ってことではないでしょうか?
0番目の... っていうのはちょっと違和感ある。


誰かが指摘したように結論はa[i]=*(a+i)で出ちゃってますが、一言。

0から始まる
 先頭からの距離=低級言語指向 機械寄り 
1から始まる 
 先頭からの番目=高級言語指向 人間寄り 

あと、0から起源はALGOLよりさらにアセンブラ、機械語までさかのぼるんじゃ?

[ メッセージ編集済み 編集者: ほろりん 編集日時 2005-03-10 12:31 ]
ぴんぴん
大ベテラン
会議室デビュー日: 2004/05/07
投稿数: 141
投稿日時: 2005-03-10 13:02
「高級言語」としての起源はそのあたりで打ち止めでしょう。
アセンブラ・機械語っていうのは、全く別の話ですわな。その時代のそのあたり
には、そもそも「配列」という概念がないでしょうから。ポインタはあってもね。
ほろりん
ベテラン
会議室デビュー日: 2004/11/24
投稿数: 98
お住まい・勤務地: あそこ
投稿日時: 2005-03-11 10:48
あー、確かに。なにもーろくしてんだろ>あちき。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2005-03-13 18:11
unibon です。こんにちわ。
#しつこく書きますが。

引用:

なか-chanさんの書き込み (2005-03-09 13:30) より:
暦といえば、getMonth() で0〜11を返すのは
なんとかならなかったものか...


年や日が1オリジンなのに、月が0オリジンなのは違和感がありますね。
思い付きですが、ハンガリー記法のような感じで、変数やメソッドの戻り値に「型」があって、0オリジンか1オリジンかを区別できると良いのかもしれません。本来のハンガリー記法の用途(文字列か数値かの区別や、ポインタか否かの区別)は、変数の使い方をざっと見れば区別できるので記法の必要性は感じませんが、0オリジンか1オリジンなのかは、変数の使い方を注意して見ないとなかなか分かりませんので、記法で区別するのはあったほうが良いかもしれません。
for (int orgin0Counter = 0; orgin0Counter < 10; orgin0Counter++) {
}
とか
for (int orgin1Counter = 1; orgin1Counter <= 10; orgin1Counter++) {
}
みたいに。
しかし、こんな基本的なこと(数をいくつから数え始めるか)こそ、字下げの桁数云々よりも優先してコーディング標準で標準化すべきでしょう。

なお、年月日に比べると時分秒が0オリジンなのは暗に助かっています。たしかに時なら1オリジン(1〜12)の表記も混在してはいますが、0 → 12 になっているだけであり 12 や 24 の modulo を求めるだけで良く、0 → 1 のように 1 ずれるわけではないので。
アナログ時計の文字盤のてっぺんが1から始まって(よって最下部が7になって)いたら、とても困ったでしょう。
Elle
常連さん
会議室デビュー日: 2004/09/29
投稿数: 23
投稿日時: 2005-03-14 09:15
引用:

unibonさんの書き込み (2005-03-13 18:11) より:
<ちょっきん>
年や日が1オリジンなのに、月が0オリジンなのは違和感がありますね。
思い付きですが、ハンガリー記法のような感じで、変数やメソッドの戻り値に「型」があって、0オリジンか1オリジンかを区別できると良いのかもしれません。
<ちょっきん>


なるほど、確かに「1オリジン」と「0オリジン」は添え字としての変数の型が違うのかもしれませんね。
量や位置を表す「0オリジン」と、順番を表す「1オリジン」
順番int型は、正整数で0はout of rangeなのでしょう。
量・位置int型は、整数なので0を扱うと。

配列の添え字に「順番int型」を使うと「1オリジン」、「量・位置int型」を使うと「0オリジン」という形になると・・・面倒くさいだけだろうな。 (^^;

スキルアップ/キャリアアップ(JOB@IT)