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

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

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

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

Q&A

解決済

リーダブルコードを先日読み「do while文」は良くないので書き換えるよう記述されていたのですがJavaScriptだとどう書き換えたらいいのでしょうか?

sino3325
sino3325

総合スコア55

JavaScript

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

2回答

0グッド

0クリップ

245閲覧

投稿2023/01/24 22:05

リーダブルコードという本の89ページ目に「do while文」に関する記述があるのですが、
JavaScriptとは違う言語で解説されており、その言語もコード自体も私には複雑なためわからずこちらで質問させていただきました。

リーダブルコードいわく「do while文」がだめな理由は、
普通はコードを上から下に読むのにdo whileは条件式が最後に来るのでコードを2回読むことになり不便だからとのことです。

例えば、以下のコードだとdo whileを使わずにどう書き換えたらいいのかご存じの方がいたらご教授お願いいたします。

javascript

1// コンソールログにhogeを合計10回表示する 2let i = 0; 3do { 4 i++; 5 console.log('hoge'); 6} while (i < 10);

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

0

そのコードの場合、

  • 実行したいメインの処理が i に依存していない
  • 継続条件がメインの処理に依存していない

なので、

js

1let i = 0; 2while (i < 10) { 3 i++; 4 console.log('hoge'); 5}

js

1for (let i = 0; i < 10; ++i) { 2 console.log('hoge'); 3}

に書き換えられます。

一般的には、

js

1do { 2 A; 3} while (C);

は、

js

1A; 2while (C) { 3 A; 4}

に置き換えられます。個人的には A を2箇所に書くぐらいだったら do while のままで許容してます。

投稿2023/01/24 22:18

編集2023/01/24 22:34
int32_t

総合スコア17125

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

sino3325

2023/01/24 23:09

回答ありがとうございます。 たしかに、1度実行してからwhileでループすることで記述量も読む量も増やすくらいなら、do whileをそのまま使った方が良さそうですね。

0

ベストアンサー

ループ回数が決まってるならfor

投稿2023/01/24 22:16

m.ts10806

総合スコア79980

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

m.ts10806

2023/01/24 22:18

リーダブルコードは良書ですが、何かしらの言語を基礎程度にはおさめておかないと厳しいと思います。 言語が違ってもお作法が違うだけでロジックは同じなので、その言語で書けずとも読めるくらいの(漢字あるある)力は必要ですね
sino3325

2023/01/24 22:57

回答ありがとうございました。 書けずとも読めるくらいの力は必要なんですね。 他の言語も読める力を付けていきます。
m.ts10806

2023/01/24 23:01

「何やってるかなんとなくわかる」くらいは必要ですね。 ただ、「絶対にこうじゃなきゃいけない」ということはないですし、 色々な書き方で同じ結果が得られるような遊びのコードはいっぱい書いた方が良いです。
Zuishin

2023/01/24 23:23

この質問のコードなら for が良いというのは同意します。 リーダブルコードは当たり前のことしか書いてないという印象があるのでろくに目を通していませんが、do while は条件が必要になるのが最後なので、条件から読む必要がなく、上から下に読んで不都合はありません。 もしそれで不都合があるとしたら、それはおそらくループ内のコードが多すぎるのでしょう。 無理やり while や for に変換するよりも、ループ内のコードから汎用の処理を切り出して外に出せないかどうかを検討するのが良いのではないかと思います。 JavaScript では map や filter などを使えば可読性があがることがあります。 これはリーダブルコード執筆時にはなかった技術なので書いていないと思いますが、積極的に使うのが良いと思います。
m.ts10806

2023/01/24 23:44

Zuishinさん 補足ありがとうございます。 色々な書き方を知っておき、その時々にあった書き方でしっかりパフォーマンスを出していきたいですね。 これは今でもどの言語でも実装時に悩むところです。 それまでの実装に合わせるか、自分の書き方で作るか

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

JavaScript

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