javascript
1for(let i = 0; i < 10; i ++) { 2...処理 3} 4 5
for文の条件について
i < 10未満と書かれている物が多いですが理由があるのでしょうか?
<=や==などの比較演算子を使用しない方が良いなどありましたらご教授いただけると
幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
ベストアンサー
配列が0オリジンなので、最後のインデックスは長さより1少なくなります。結果、i < arr.length
というかたちで条件を書くことがよくあります。
もちろん、「1から9まで回したい」場合にfor(i = 1; i <=9; ++i)
と書いても、全く問題ありません。
投稿2018/01/15 10:48
総合スコア145183
0
もともと配列の場合、添え字は0から始まるのが古来よりの作法です。
これは配列が実際にはメモリブロックであること、そして配列の要素へのアクセスが、「配列の先頭アドレスと、そこからの要素数によるオフセット」であることから、配列の先頭を 0 としたほうが素直になるからです。
このため、配列の最大の添え字数は、要素の総数 - 1 となります。
それを踏まえると、for で配列を処理する場合、< {要素総数}
の方が、<= {要素総数-1}
より(コードを読む人が)直感的にわかりやすいのです。
ちなみにパフォーマンスから言えば、ほとんどの CPU は数値の比較処理において < と <= と、どちらも対応する命令がある(x86 系でいえば CMP のあとが JB か JBE になるだけ)ため、パフォーマンスに違いが出るようなことはありません。
投稿2018/01/16 00:05
総合スコア13703
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
i < 10
i < 10未満と書かれている物が多いですが理由があるのでしょうか?
説明の為の例示としては多いかもしれませんが、実用のコードを書く際には 10 等の固定値を書くことは、あまりありません。
固定値にしてしまうと汎用性が犠牲となる事が多い為、array.length
や map.size
等を変数に格納して、条件式を決定します。
< と <= の違い
<=
や==
などの比較演算子を使用しない方が良いなどありましたらご教授いただけると幸いです。
<=
は~~「<
と ==
の複合型」~~「>
の反意」なので、<
でも要件を満たせる場合はパフォーマンス上の理由で <
を採用する事があります。
最終的にはケースバイケースなので、狭い視野にとらわれず、柔軟に対応していくべきだと思います。
<=
や ==
は使用しても良い演算子です。
個人的には ==
は型変換規則が複雑化する元なので、===
を採用します。
(2018/01/16 11:55追記)
「< と == の複合型」については間違いでしたので、訂正しました。
パフォーマンスについても遅くなると言う理由が見当たりません。
<
が単一条件なのに対して、<=
がOR条件になってしまうという意味です。
上記仕様から引用しますと、下記が <
の手順。
RelationalExpression:RelationalExpression<ShiftExpression
...(中略)...
7. If r is undefined, return false. Otherwise, return r.
下記が <=
の手順です。
RelationalExpression:RelationalExpression<=ShiftExpression
...(中略)...
7. If r is true or undefined, return false. Otherwise, return true.
step7 で <=
は true or undefined の2つの条件を指定していますが、<
は一つの条件で良い。
従って、r 値が true である限りは両者のパフォーマンスは同等ですが、undefined であった場合にわずかながら <
の効率が良い計算となります。
Re: hidegital さん
投稿2018/01/15 14:49
編集2018/01/16 02:57総合スコア18162
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/16 02:58
0
他の回答が正解だと思うので、この回答は蛇足です。
javascriptにはint型がないので、0に1を9回足して9ぴったりになる保証はないのではないかな、などふと不安になることがあります。もちろん杞憂なのでしょうけど。
たとえば、9.0000000000001とかになったらどうしよう、みたいな。
予想外に1回多い分には例外が投げられたり値がundefinedになったりするので分かりやすいですが、予想外に1回少ないのは気づきにくいバグになりそうで。
いや、こういうことを言い出すときりがないのはわかっているんですけどもね。
投稿2018/01/16 00:23
総合スコア36074
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/16 07:00