質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

893閲覧

JavaScriptのdo...while命令について。処理の違いがわかりません。

退会済みユーザー

退会済みユーザー

総合スコア0

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/08/12 04:22

こんにちは。
テキストでJavaScriptの文法の復習をしていて、よく理解できないところがあり、
質問させて頂きます。

わからないところ

do...while命令の説明で出てきた、以下2つのコードの結果の違いがよくわからないです。
(1度、自分のVSCodeで記述して挙動の確認はしております。)

①初期値xが8からスタートする場合

let x = 8; do { console.log(x); x++; } while (x < 10); // 結果 // 8 // 9

②初期値xが10からスタートする場合

let x = 10; do { console.log(x); x++; } while (x < 10); // 結果 // 10

テキストには次のように記載されていました。
「do...while命令は、後置判断で、ループ処理の最後に条件式を判断する。
もし、初期値の変数xを8ではなく、10にしてみると、1度だけループ処理が実行される。」

①の場合、x=10になっても、処理は実行されないのに、
②の場合では、x=10なのに、処理が実行される。
これはどうしてなのでしょうか?

後置判断なのであれば、①の場合であっても、
x=10になってもループ処理を実行してから処理を終了するという意味なのでは?と考えたのですが...。

ご存知の方がいらっしゃれば、教えて頂ければと思っております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ポイントは「x を使った判定をするタイミング」だけではありません.
x を出力するタイミング」「x が増えるタイミング」との関係が重要です.

JavaScript

1let x = 8; 2do { 3 console.log(x); 4 x++; 5} while (x < 10);

JavaScript

1let x = 10; 2do { 3 console.log(x); 4 x++; 5} while (x < 10);

確かにどちらも「x を使った判定をするタイミング」はループ処理の後です.
なので, 初めから条件を満たしている x = 10 のパターンでも必ず一度は処理が行われます.

問題は, 最初は条件を満たしていない x = 8 のパターンですね.
x を出力して」「x を増やして」「x10 未満なら戻る」
の順番です. ひとつひとつ, 処理をなぞってみましょう. トレースしてみるんですね.

  • x8 なので, 8 を出力する.
  • x8 から 9 に増やす.
  • x910 未満なので, 戻る.
  • x9 なので, 9 を表示する.
  • x9 から 10 に増やす.
  • x1010 未満ではないので, 進む.

お気づきでしょうか.
出力したした後に増やして, 増やした直後にそれを判定基準に用いているんです.
増やした後に, それを出力する前に判定に入るんです.
なので, 後者のコードで 10 が出力されることはありません.
これが

JavaScript

1let x = 8; 2do { 3 x++; 4 console.log(x); 5} while (x < 10;

と, ループ内の処理順が逆だったら全く違う結果になることでしょう.
出力前に増やすので初期値の 8 は出力されなくなり,
逆に判定前に出力するので 10 は出力されるようになります.

投稿2020/08/12 04:42

kagilinn

総合スコア354

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

後置判断なのであれば、①の場合であっても、

x=10になってもループ処理を実行してから処理を終了するという意味なのでは?と考えたのですが...。

はい。最初のx=8のときには判定せずにループが走ります。その後は判定→ループの中身の繰り返しです。

投稿2020/08/12 04:31

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

手抜きせず、ちゃんと順番に考えましょう。
①の場合、

JavaScript

1x = 8; 2console.log(x); // 8 3x++; // x=9 4(x < 10); // 9 < 10 => true なのでループ継続 5console.log(x); // 9 6x++; // x=10 7(x < 10); // 10 < 10 => false なのでループ終了

投稿2020/08/12 04:28

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/08/12 04:37

回答してくださり、ありがとうございます。 ①の場合、x=9でループ処理をした時の最後のx++の時点で、x=10になり、その後に条件式を判断するから、falseになってループが終了するのですね! ②の場合だと、条件判断も何もない、最初からx=10だから、一旦ループ処理は行われて、やっと条件判断が出てきて、初めてfalseと判明し、ループが終了するという違いだったんですね! 納得できました。ありがとうございます!「後置判断」という言葉だけに囚われてしまっていたようですね。すみませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問