javascript
1for(let count = 0;count<1;count++){ 2console.log("こんにちは"); 3} 4 5for(let count = 0;count<1;++count){ 6console.log("こんにちは"); 7}
最初の記述は「こんにちは」1回は予想できたのですが、2番目の記述は「こんにちは」が2回になると思うのですが、なりません。
これはfor自体がwhileの場合と比べて制限が厳密と考えればよいのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/31 03:34
回答5件
0
for文の説明なら任せてください。
teratailの他の質問でfor文の制御フローを解説するために作成した図です。
増減の部分が++countでもcount++でも終了条件に影響しません。
for(let count = 0;count<1;count++){ console.log("こんにちは"); } for(let count = 0;count<1;++count){ console.log("こんにちは"); } for(let count = 0;count<1;count=count+1){ console.log("こんにちは"); } for(let count = 0;count<1;count+=1){ console.log("こんにちは"); }
4つとも同じ繰り返し回数になります。
投稿2019/08/31 01:50
総合スコア777
0
こういう時は仕様を見るのが一番ですね。
ECMAScript® 2020 Language Specification
3.fで3番目の式?が評価されますが、評価値は用いられていないことがわかります。3.aで評価されるのは3番目の式?ではなくて2番目の式?です。
投稿2019/08/31 01:30
総合スコア36074
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/31 02:57
2019/08/31 03:21 編集
2019/08/31 03:22
2019/08/31 03:37
2019/08/31 04:20 編集
2019/09/01 07:00
0
count++
と++count
の違いは、この式自体を利用した場合の値(a = b++;
とa = ++b;
でa
の値が違う)だけです。
for
の3つ目に書いた式は評価はされるものの値は使われないので、count++
と++count
で何も変わりません。
投稿2019/08/31 01:02
総合スコア145183
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
こんにちは
以下の回答では、 説明の便宜上、
- for (・・・) { } の ・・・ の部分を、 MDNのfor 文の説明にそって、 セミコロンで区切った3つの式を各々、 for (
初期化式
;条件式
;加算式
) と呼ぶことにします。 - 同様に、 while(・・・) { } についても、式 ・・・ を
条件式
と呼ぶことにします。
以下は、 インクリメント演算子(++)についての、MDN からの引用です。
インクリメント (++)
インクリメント演算子は数値を 1 ずつ加算し、値を返します。
・オペランドの後に演算子を置く後置記法 (例: x++) で使った場合、加算する前の値を返します。
・オペランドの前に演算子を置く前置記法 (例: ++x) で使った場合、加算した後の値を返します。
- 以上、 算術演算子 - インクリメント (++) より引用
上記の確認のため、ご質問に挙げられている for
を使ったコードを、 count ++
と ++ count
とで、結果が異なるように修正するならば、加算式でインクリメントせずに、以下のように、条件式でインクリメントするようにします。
- 後置インクリメント(for の条件式でインクリメントする)
javascript
1for (let count = 0; count ++ < 1; ) { 2 console.log("こんにちは"); // 1回表示される。 3}
- 前置インクリメント(for の条件式でインクリメントする)
javascript
1for (let count = 0; ++ count < 1; ) { 2 console.log("こんにちは"); // 1回も表示されない。 3}
上記の2つを while
を使って書き直すと、それぞれ以下になります。
- 後置インクリメント(while の条件式でインクリメントする)
javascript
1let count = 0; 2while (count ++ < 1) { 3 console.log("こんにちは"); // 1回表示される。 4}
- 前置インクリメント(while の条件式でインクリメントする)
javascript
1let count = 0; 2while (++ count < 1) { 3 console.log("こんにちは"); // 1回も表示されない。 4}
ご質問に提示されている、以下の2つのコード
- 後置インクリメント(for の条件式でインクリメントせず、加算式でインクリメントする)
javascript
1for (let count = 0; count < 1; count ++ ){ 2 console.log("こんにちは"); // 1回表示される。 3}
- 前置インクリメント(for の条件式でインクリメントせず、加算式でインクリメントする)
javascript
1for (let count = 0; count< 1; ++ count ){ 2 console.log("こんにちは"); // 1回表示される。 3}
を while
で書き直せば、以下のように、後置インクリメントが返す値と前置インクリメントが返す値との差が、ループ継続の判定に影響しないものになります。
- 後置インクリメント(while の条件式でインクリメントせず、ループ本体の最後にインクリメントする)
javascript
1let count = 0; 2while (count < 1) { 3 console.log("こんにちは"); // 1回表示される。 4 count ++; 5}
- 前置インクリメント(while の条件式でインクリメントせず、ループ本体の最後にインクリメントする)
let count = 0; while (count < 1) { console.log("こんにちは"); // 1回表示される。 ++ count; }
以上を整理すると、以下の3点です。
- 冒頭に挙げた、MDNによる インクリメント演算子(++)の説明に
インクリメント演算子は数値を 1 ずつ加算し、値を返します。
と書かれています。つまり、インクリメント演算子を使うことによって返される値がある、ということです。
- 後置インクリメントと前置インクリメントとで差異が生じるのは、この返される値を使ったときです。上記に挙げた全8点のコードうち前半4点はその例になっています。
- 条件式でインクリメントしないコード(後半の4点)では、返される値を使っていないので、前置と後置とで同じ結果("こんにちは" と1回表示される)になります。
参考になれば幸いです。
投稿2019/08/31 03:10
編集2019/08/31 03:44総合スコア9058
0
for 文
JavaScript
1for(let count = 0;count<1;count++); 2for(let count = 0;count<1;++count);
両コード共に、
- 繰り返し条件式は
count<1
- 繰り返し開始時の処理はインクリメント(1を加算)
なので、繰り返し回数は変わりません。
インクリメント
インクリメントの過去質問。
Re: hisayan さん
投稿2019/08/31 00:56
編集2019/08/31 01:05総合スコア18162
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。