投稿数 - 437, コメント - 49225, トラックバック - 156

0 ベース vs 1 ベース

10 回ループしたい場合、私は以下のように書く。

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

しかし、最近見たコードは全部以下のように書かれてた。

for (int i = 1; i <= 10; i++)

ループ中で i は使ってない(配列のインデックスなど)し、間違ってもいないので別に良いんだが、何となく気持ち悪い。何故 1 から数えるのか。

投稿日時 : 2007年7月27日 12:45

フィードバック

# re: 0 ベース vs 1 ベース

1からスタートの人→VB(4以前),COBOL (Not C経験)
2からスタートの人→C経験者。.NETな世界の人

かな(笑)
VBは.NETから0スタートで固定になったっぽいので(^^;
私は配列が0スタートっていうのを理解するのに時間がかかったシーラカンスです(^-^;
2007/07/27 12:52 | 片桐

# re: 0 ベース vs 1 ベース

逆にいえば「なぜ0から数えるのか」と問えませんか。
0から数えるのはコンピュータ指向であり、C言語指向だと思います。
一方、人間は日常的に、数は1から数えますから、1ベースの方が自然だと思います。
C言語およびその派生言語がもたらした悪しき慣習ということで。
2007/07/27 13:10 | シャノン

# re: 0 ベース vs 1 ベース

むかしむかしそのむかし

FOR I = 1 TO 10
 A(I) = ほにゃららー
NEXT

みたいなコードを何度も何度も何度も書いてたもんだから、
ループ変数は1から始めないと気持ちわりーんぢゃないでしょか。
2007/07/27 13:12 | επιστημη

# re: 0 ベース vs 1 ベース

あぁ、俺ぁ論点がズレてるや。
C系列の言語を使うなら0オリジンが望ましいです。
でも、1オリジンの言語がいけないわけじゃないです。
2007/07/27 13:15 | シャノン

# re: 0 ベース vs 1 ベース

皆さんが仰る通り、書いた人は昔の癖が抜けないのかな?
結局、私が言いたい事は「何故、その土地の慣習に合わせないの?」という事です。
2007/07/27 13:27 | 囚人

# re: 0 ベース vs 1 ベース

0起点は、n回繰り返したと言う考え方。
1起点は、n回目の繰り返しと言う考え方。
です。
#ループカウンタの場合のみ

ループ中にカウンタを利用する場合(エピさんのコード例)は、実装依存なので考え方には当てはまらない。

要は視点の問題ですよ。
2007/07/27 13:30 | とっちゃん

# re: 0 ベース vs 1 ベース

indexは0ベースの法が扱いやすいシチュエーションが多いと思いますね。

そもそもコンピュータ内の情報としては0を基点にしているのだから(すべての桁が0で埋まった2進数は0を表す)0を基点にしないと都合が悪い。
数学的にも0から始まらないと気持ち悪い…。
2007/07/27 13:34 | nagise

# re: 0 ベース vs 1 ベース

こういうのってイディオムだと思うんですよ。
10 と固定値で書いたから伝わりにくかったかもしれませんが、

for (int i = 0; i < count; i++)
for (int i = 0; i <= count - 1; i++)
for (int i = 1; i <= count; i++)

だと、一番最初のコード以外は一瞬思考しないといけないのは私だけでしょうか。
2007/07/27 13:42 | 囚人

# re: 0 ベース vs 1 ベース

さすがに真ん中の i <= count-1 は、考えちゃいますが
それ以外は両方とも使うので、思考が止まることはないなぁ...

単純なループカウンタとしては、おいらは0ベース派なので、
最初のほうがしっくりきますけどね。
#n回繰り返したか?という確認のほうが好きw
でも、あと何回やる?という while( count-- ) のほうがもっと好きw
2007/07/27 13:57 | とっちゃん

# re: 0 ベース vs 1 ベース

「何故、その土地の慣習に合わせないの?」

となると、囚人さんに激しく同意♪
2007/07/27 14:01 | とりこびと

# re: 0 ベース vs 1 ベース

> 私が言いたい事は「何故、その土地の慣習に合わせないの?」という事です。

それを問うなら、土地の慣習に合わせるべきです。
しかし、

> 一番最初のコード以外は一瞬思考しないといけないのは私だけでしょうか。

それは慣れの問題です。
1から数えるのが慣習のチームに配属されたら、何度でも思考してください。
2007/07/27 14:09 | シャノン

# re: 0 ベース vs 1 ベース

>でも、あと何回やる?という while( count-- ) のほうがもっと好きw
なぬっw

>それは慣れの問題です。
>1から数えるのが慣習のチームに配属されたら、何度でも思考してください。

変な言い方をしたから誤解を招いたかもしれませんが、「土地の慣習」ってのは「言語特有」のものであって、0 から数えるとか 1 から数えるとかをチーム毎に変えるべきではないでしょう。
0 から数える事が基本の言語なら 0 ベースで考えるべきだし、1 から数える事が基本の言語なら 1 ベースで考えるべきですよね。
んで、慣れとかではなくて、それを混在するから一瞬考えてしまうわけです。
2007/07/27 14:17 | 囚人

# re: 0 ベース vs 1 ベース

> ループ中で i は使ってない(配列のインデックスなど)し、

この前提なら (ループカウンタをインデックスのように使わないなら) 私も 1 から開始します。 インデックスとして使うなら 0 からになるか foreach になるでしょう。

ループカウンタを使わないループするパターンがほとんどないのであまり考えたことがなかったですが、言語どうこうより仕様の概念を優先することが多いです。
2007/07/27 14:27 | じゃんぬねっと

# re: 0 ベース vs 1 ベース

0ベースと1ベースの話を聞くと
イギリス人とアメリカ人が1Fで待ち合わせすると会えない、
という話を思い出す。
2007/07/27 14:29 | よね

# re: 0 ベース vs 1 ベース

> while( count-- ) のほうがもっと好きw

機械語いぢってた・いぢってるヒトには
LOOP:
....
DEC B # 1引いて
JR NZ, LOOP # non-0 ならもう一回
のイメージそのまんまだからかなー? ^^;
2007/07/27 14:30 | επιστημη

# re: 0 ベース vs 1 ベース

while( count-- ) をfor文で書いてあるのを見た時思考が完全に停止したことを思い出しました。
2007/07/27 14:44 | K5

# re: 0 ベース vs 1 ベース

i = 0 の(脳内)解釈として
・0から
・初期値が0
があるからだと思います。
脳内という点ではそれまでの経験言語も多少影響してると思います。
#そういえば.NET始めた当初、CollectionBaseだけが1ベースだったのでやりにくかった。。。

To句があるのに、From句やInit句が無いのが原因かも。
2007/07/27 14:47 | まどか

# re: 0 ベース vs 1 ベース

わたしの場合、2通りが混在しますね~
配列なんかのループのときはゼロだけど、例えば試行回数が10回、ってときなんかは1から始めます。
for (i = 0; i < items.Count; i++);
for (i = 1; i <= tryCount; i++);
添え字として使用するループ変数でしたら使用言語(使用対象)に合わせるけど、添え字として使わない場合は1から始めたいなって思ってます。
C#でエクセルを操作する時だと、添え字に使っても1からです。
#それと++は後ろ派ですw
2007/07/27 15:02 | 通り*

# re: 0 ベース vs 1 ベース

矩形配列のようなものがあったとして
int[] val = int[width * height];
と宣言されているとする。

for (int y=0; y<height; y++) {
for (int x=0; x<width; x++) {
val [y * width + x];
}
}

となるところ、1ベースだと
for (int y=1; y<=height; y++) {
for (int x=1; x<=width; x++) {
val [(y-1) * width + (x-1)];
}
}
となる。ループカウンタをループ内で2次利用する場合、0ベースの方が都合がよいと思われる。
ただし、ループカウンタをとくに利用しないのであれば、あまり大きな差異は出ないのではないか。
2007/07/27 15:13 | nagise

# re: 0 ベース vs 1 ベース

> 0 から数える事が基本の言語なら 0 ベースで考えるべきだし、1 から数える事が基本の言語なら 1 ベースで考えるべきですよね。

おおむね賛成!
一個だけ例外。

カウンタ変数を使って「~番目」って表示をする場合で、カウンタ変数を配列の添え字に使っていないのであれば、いちいち+1するのは面倒なので、1始まりにします。
2007/07/27 16:09 | 刈歩 菜良

# [雑記]

for (int i = 0; i &#60; count; i++) for (int i = 0; i &#60;= count - 1; i++) for (int i = 1; i &#60;= count; i++) だと、一番最初のコード以外は一瞬思考しないといけないのは私だけでしょうか。 0 ベース vs 1 ベース ループをn回目とm回目で分割することを考えてみ

# re: 0 ベース vs 1 ベース

>機械語いぢってた
この要素は少なからずあるはずw

なにせ、小学生時代(と言っても高学年だけどw)に受けた影響だから、ないなんてことは絶対にない!w

なので、おいら的には、「何回やった?」とか、「あと何回やるか?」と言うほうが考え方としてはしっくりくるのね。
#都合がいいのは、C ではどちらでも表現可能と言うことw

なので、インデックスとして使う場合(nagiseさんの例)以外では
必ずどっちか。

どっちにするかは、誰がソースを見るか次第だなぁw
なぜかって?
whlie( count-- ){...}
をみて思考がそこで止まっちゃう人がいるからww
2007/07/27 16:17 | とっちゃん

# re: 0 ベース vs 1 ベース

機械語だとゼロジャンプかノンゼロジャンプを多用するからなぁ。
差分とってTESTで結果確認してジャンプするより、カウントダウンしてゼロでジャンプのほうが楽なのはわかる。
しかし…高級言語に持ち込むのはどうなんだろう?w
2007/07/27 16:32 | nagise

# re: 0 ベース vs 1 ベース

>しかし…高級言語に持ち込むのはどうなんだろう?w
いや、高級言語に持ち込んでるんではなくて、思考をコード的に表現した結果が
「たまたま」while( count-- ) と言うだけです。
#実装として、 while にしてるとか、> 0 や != 0 をつけてないとかはありますけどw
#そこは本筋ではありません。


要するにおいらの基本思想が「残りどんだけ?」なわけです。
なので、単純なカウンタループであれば、カウントダウンのほうが好き。

要するに根がものぐさなおいらとしては、遊んでいたいわけですw
なので、仕事が回ってきたら、片付けるものをリストアップして残りこんだけー!
としたいわけですw
なので、一番しっくりする表現が count-- != 0 となる(count-- > 0 でもよい)。

ノルマが幾つでいくつこなしたぜ!ってのはおいらの思考的には好みじゃねーわけですw
2007/07/27 19:15 | とっちゃん

# re: 0 ベース vs 1 ベース

こんな記事にコメントなんてつかんだろーと思ってたら、どえらいコメント数。

while( count-- )
↑結構分かりやすいなぁ~と思いました。アリですね。

ところで、機械語っておいしいのかな?w
2007/07/27 19:49 | 囚人

# re: 0 ベース vs 1 ベース

> 要するにおいらの基本思想が「残りどんだけ?」なわけです。
なるほど。しかし、カウントダウン方式だと0ベースだと微妙に記述しにくいのが嫌らしいところですね。
そっちだと1ベースの方が相性いいのかしらん?

最近のJavaでは(JavaSE5.0以降)いわゆるfor-each構文がサポートされまして、GoFデザインパターンのIteratorパターンを用いて
for (Object o : iterator) {
// 実際の処理
}
という書き方をするので、あえてループカウンタが必要な場合以外はIteratorが返す限り~というOOPな世界へ。
ループカウンタが必要になるのは全for文中、1割にも満たない気がします。私の脳みそは最近そういうロジックにw
2007/07/27 21:05 | nagise

# 0 ベースなんだけど&hellip;&hellip;

0 ベースなんだけど&hellip;&hellip;
2007/07/30 15:49 | やまだの仮想庭園

# [画像処理](x1,y1,x2,y2) vs (x,y,width,height)

[画像処理](x1,y1,x2,y2) vs (x,y,width,height)

# [画像処理](x1,y1,x2,y2) vs (x,y,width,height)

[画像処理](x1,y1,x2,y2) vs (x,y,width,height)

# eyJARUoVcCHADWhlHUZ

It`s really useful! Looking through the Internet you can mostly observe watered down information, something like bla bla bla, but not here to my deep surprise. It makes me happy..!

# Article writing is also a excitement, if you be familiar with after that you can write or else it is complicated to write.

Article writing is also a excitement, if you be familiar with after that you can write or else it is complicated to write.

# Ahaa, its good dialogue on the topic of this article here at this webpage, I have read all that, so at this time me also commenting here.

Ahaa, its good dialogue on the topic of this article
here at this webpage, I have read all that, so at
this time me also commenting here.

# Simply desire to say your article is as surprising. The clearness in your post is simply cool and i can assume you're an expert on this subject. Fine with your permission allow me to grab your RSS feed to keep up to date with forthcoming post. Thanks a m

Simply desire to say your article is as surprising.
The clearness in your post is simply cool and i can assume you're an expert on this subject.

Fine with your permission allow me to grab your RSS feed to keep up to
date with forthcoming post. Thanks a million and please keep up the gratifying work.

# Paragraph writing is also a excitement, if you be acquainted with afterward you can write otherwise it is difficult to write.

Paragraph writing is also a excitement, if
you be acquainted with afterward you can write otherwise
it is difficult to write.

# For most up-to-date news you have to visit world-wide-web and on web I found this web page as a finest site for newest updates.

For most up-to-date news you have to visit world-wide-web and on web I found this
web page as a finest site for newest updates.

# For most up-to-date news you have to visit world-wide-web and on web I found this web page as a finest site for newest updates.

For most up-to-date news you have to visit world-wide-web and on web I found this
web page as a finest site for newest updates.

# For most up-to-date news you have to visit world-wide-web and on web I found this web page as a finest site for newest updates.

For most up-to-date news you have to visit world-wide-web and on web I found this
web page as a finest site for newest updates.

# For most up-to-date news you have to visit world-wide-web and on web I found this web page as a finest site for newest updates.

For most up-to-date news you have to visit world-wide-web and on web I found this
web page as a finest site for newest updates.

# It's actually very complex in this active life to listen news on Television, so I just use web for that reason, and take the hottest news.

It's actually very complex in this active life
to listen news on Television, so I just use web
for that reason, and take the hottest news.

# It's actually very complex in this active life to listen news on Television, so I just use web for that reason, and take the hottest news.

It's actually very complex in this active life
to listen news on Television, so I just use web
for that reason, and take the hottest news.

# It's actually very complex in this active life to listen news on Television, so I just use web for that reason, and take the hottest news.

It's actually very complex in this active life
to listen news on Television, so I just use web
for that reason, and take the hottest news.

# It's actually very complex in this active life to listen news on Television, so I just use web for that reason, and take the hottest news.

It's actually very complex in this active life
to listen news on Television, so I just use web
for that reason, and take the hottest news.

# Hello there! I could have sworn I've visited this website before but after going through some of the articles I realized it's new to me. Anyways, I'm certainly delighted I discovered it and I'll be bookmarking it and checking back frequently!

Hello there! I could have sworn I've visited this website before but after going through some of the articles
I realized it's new to me. Anyways, I'm certainly delighted I discovered it and I'll
be bookmarking it and checking back frequently!

# djBVBMmpTwXnXka

OC3Vad Wolverine, in the midst of a mid-life crisis, pays a visit to an old comrade in Japan and finds himself in the midst of a power struggle.
2019/10/26 8:08 | https://www.suba.me/

# 誕生日プレゼント

芸能人の腕時計.com 中欧の大国であり、ヨーロッパの東西・南北双方の中央に位置し、バルト海の南岸という要衝にあることから、ヴァイマール三角連合 (Weimar Triangle)、ヴィシェグラード・グループ (V4)、環バルト海諸国評議会 (CBSS)、中欧イニシアティヴ (CEI)、東ヨーロピアン・グループ(EEG)(英語版) といった地域国際機関にも加盟している。
定価60万円台とやや高価格帯にはなりますが、機能美とデザイン性の高さは買う価値あり、です。
その時代背景をもとに、戦闘機のダッシュボードクロックのモチーフとして発表された「BR01」シリーズを上手に踏襲した、ベル&ロスの集大成とも言える名品です。
角型では無い、原点回帰とも言うべき丸型のベル&ロスとしての2010年新作シリーズ“ヴィンテージ BR”。
49mmと超大型のケースにヴィンテージ仕上げをふんだんにほどこした、ミリタリーファンにもヴィンテージファンにもたまらない一本です。
以来、同大学東洋学部の「日本韓国学科」は、中国研究と中国語学科の一分野として、韓国語学科と共に学科は維持され、日本語が教えられている。
日本人にとってはあまり人とかぶらず、でも最も身につけやすいモデルではないでしょうか。
1919年にワルシャワ大学に日本語講座が開かれた。
立法府として、セイムは日本の衆議院に相当し、上院より優先される。
シングルイシュー政党(全体の政策や理念でなく特定の政策のみで集まった人々の政党)の出現や少数政党の乱立、といった事態を未然に防止するため。
立法はセイム(議会)とセナト(元老院)の二院制議会 (Zgromadzenie Narodowe) によって行われる。

誕生日プレゼント https://www.yuku006.com/ProductList1.aspx?TypeId=246157381650119
2020/06/06 11:34 | pzniipmli@live.com

# 正規品と同等品質のコピー品

ぜひ購入の際の参考にしてくださいね! 中でも1500m防水という脅威の防水性能を誇るスーパーオーシャン2は、まさに最強クラスの性能でそんな腕時計も20万円台で手に入るという驚きのコストパフォーマンスを発揮している腕時計です。
オリンピック競技なども積極的にスポンサードし人類初の月面飛行にも帯同した腕時計の名門ブランドで、その中でも高い品質と精度を誇りながらリーズナブルな価格で展開されているシリーズがスピードマスター。
当初は軍用にクロノグラフの懐中時計を納入していたブランドで、その実質剛健さは今も健在の腕時計と言う事ができます。
世界中に「デカ厚腕時計」のトレンドを巻き起こした火付け役であり、多くの人から愛され続けるクッション型の腕時計が定番です。
そこで今回は、40万円台の腕時計を、メンズ・レディースの人気ランキング形式でご紹介! 人気のクオーツや機械式、最新のスマートウォッチなど、フォッシルならではの魅力的な腕時計は世界中で注目を集めています。
F1グランプリの公式時計として認知されていて、モータスポーツ界と密接な関係にある高級腕時計ブランド、そんなタフネスさとエレガンスを高い次元で融合させた人気の高いカレラシリーズのクロノグラフモデルでキャリパー1887ムーブメントを使用する事で、巻き上げ効率を格段に進化させたオススメの腕時計です。
そんなブランドのフラッグシップモデルであるカレラシリーズのヘリテージキャリパー6という腕時計は、スモールセコンドタイプの文字盤を使用し、よりエレガントな演出にこだわった高級感のある逸品です。
その中でもクロノマットはパイロットが愛する究極の相棒とも言われ、高いレベルで完成された高品質な腕時計のひとつです。
シンプルな作りのオススメ腕時計といえばラジオミールであり、お洒落なデザインでありながら防水なのも魅力的な腕時計です。
オメガは「スピードマスター」と「シーマスター」という機能的な腕時計の他に、「コンステレーション」というエレガンスウォッチも発売しています。
オメガの「コンステレーション」と言えば「星」が特徴ですが、その星を大胆に文字盤中央にランダムに配置しています。
オートエスケープバルブなどの機能も備え、プロフェッショナルの為の計器として存在しています。
航空機に使用されている計器のデザインをそのまま腕時計にしてしまうという大胆なデザインで話題のブランドで、他の追随を許さない見やすさと正確性を持ちながら非常にファッショナブルな仕上がりを見せるオススメ腕時計。

正規品と同等品質のコピー品 https://www.yuku006.com/ProductList1.aspx?TypeId=784774630394200
2020/06/08 17:42 | pysbndy@live.com

コメントの投稿

タイトル  
名前  
URL
コメント