アカウント名:
パスワード:
いい言語なのに、なんでこうしちゃったのか…。
VB使ってた身からすると、気をつけとけば良いだけじゃないかと。Forが0から始まり、len-1で終わると思い込むのは良くない。
…たまに勘違いしてるコード見るんだよなぁ。For i = 0 To UBound(arr) -1とか。なぜわざわざ-1してるのだ。
VB だと LBound から UBound までではなかったですか0 始まりや 1 始まりですら思い込みかと
うむ。そういう意味の例示だったので、ツッコミ多謝。
Option Base 1というオプション指定で、配列のIndexが1開始になるのよね。ほとんど見たこと無いんだけど、VBAの仕事で目撃したことがあって、怖いなぁと思った。
ついでに言うと、実はこれは暗黙の宣言の時のIndexであって、Dim arr(-10 To 10)とかいう宣言ができてしまう。arr(-10)~arr(10)まで使える。Indexが負数ってw
動的配列を使う場合、空扱いしたい時に ReDim arr(-1 To -1) として For i = 0 To UBound(arr) に入らないようにする小技とかもあったりする。一筋縄ではいかない。
多分、絶対的に経験値が足りなさすぎるんだろう。当たり前のことが当たり前なんだということは少し勉強すればわかるようになるよ。
大昔の VB は、配列添字は 1始まり固定。レンジ指定とかない。そういう古いコードは、1始まりであることを前提に書いてるから、その時代のコードを今の環境でも利用しようとしたら、明示的に書いとかないと不具合も出る。安全のためには必須。配列の添字範囲が自由なのも、制限する必要なんぞ無いため。インデックスとなる値が負の範囲なら、配列操作するためにオフセット加算して配列用のインデックスを別に作り出すよりも、配列を負の範囲で宣言して同じものが使えるほうがよっぽど素直だよ。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
日々是ハック也 -- あるハードコアバイナリアン
配列のインデックスが1から始まる言語か… (スコア:1)
いい言語なのに、なんでこうしちゃったのか…。
Re: (スコア:1)
VB使ってた身からすると、気をつけとけば良いだけじゃないかと。
Forが0から始まり、len-1で終わると思い込むのは良くない。
…たまに勘違いしてるコード見るんだよなぁ。
For i = 0 To UBound(arr) -1
とか。なぜわざわざ-1してるのだ。
Re: (スコア:0)
VB だと LBound から UBound までではなかったですか
0 始まりや 1 始まりですら思い込みかと
Re:配列のインデックスが1から始まる言語か… (スコア:1)
うむ。そういう意味の例示だったので、ツッコミ多謝。
Option Base 1
というオプション指定で、配列のIndexが1開始になるのよね。
ほとんど見たこと無いんだけど、VBAの仕事で目撃したことがあって、怖いなぁと思った。
ついでに言うと、実はこれは暗黙の宣言の時のIndexであって、
Dim arr(-10 To 10)
とかいう宣言ができてしまう。
arr(-10)~arr(10)まで使える。Indexが負数ってw
動的配列を使う場合、空扱いしたい時に ReDim arr(-1 To -1) として For i = 0 To UBound(arr) に入らないようにする小技とかもあったりする。
一筋縄ではいかない。
Re: (スコア:0)
多分、絶対的に経験値が足りなさすぎるんだろう。
当たり前のことが当たり前なんだということは少し勉強すればわかるようになるよ。
大昔の VB は、配列添字は 1始まり固定。
レンジ指定とかない。そういう古いコードは、1始まりであることを前提に書いてるから、その時代のコードを今の環境でも利用しようとしたら、明示的に書いとかないと不具合も出る。安全のためには必須。
配列の添字範囲が自由なのも、制限する必要なんぞ無いため。
インデックスとなる値が負の範囲なら、配列操作するためにオフセット加算して配列用のインデックスを別に作り出すよりも、配列を負の範囲で宣言して同じものが使えるほうがよっぽど素直だよ。