レッスンに戻る

while でどの値が表示される?

重要性: 4

各ループで、どの値が表示されるか、あなたの意見を書きなさい。また、それと答えを見比べてみてください。

両方のループは同じ数だけ alert されますか?それとも違いますか?

  1. プレフィックス形式 ++i:

    let i = 0;
    while (++i < 5) alert( i );
  2. ポストフィックス形式 i++

    let i = 0;
    while (i++ < 5) alert( i );

このタスクは、ポストフィックス/サフィックス形式を比較で使ったときに、どのように異なる結果に繋がるかを示します。

  1. 1 から 4

    let i = 0;
    while (++i < 5) alert( i );

    最初の値は i=1 です。なぜなら、i++ は最初に i をインクリメントし、新しい値を返します。なので、最初の比較は 1 < 5 で、alert1 を表示します。

    次に、2,3,4… に続きます – 値は次々に表示されます。比較は常にインクリメントされた値を使います。なぜなら ++ は変数の前にあるからです。

    最終的に、i=4 では 5 にインクリメントされ、比較 while(5 < 5) が偽になりループが停止します。なので、5 は表示されません。

  2. 1 から 5

    let i = 0;
    while (i++ < 5) alert( i );

    最初の値は再び i=1 です。i++ のポストフィックス形式は i をインクリメントし、古い 値を返します。なので、比較 i++ < 5i=0 を使います (++i < 5 とは逆です)。

    しかし、alert 呼び出しは別です。インクリメントと比較の後に実行される別の文なので、現在の i=1 を使います。

    そして 2,3,4… に続きます。

    i=4 で止めてみましょう。プレフィックス形式 ++i はインクリメントし、比較では 5 を使います。しかし、ここではポストフィックスです。なので、i5 にインクリメントしますが、古い値を返します。従って、比較は実際 while(4 < 5) – true です。そして制御は alert に行きます。

    i=5 は最後です。なぜなら次のステップ while(5 < 5) は偽になるからです。