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

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

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

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

Q&A

解決済

2回答

725閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿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);

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

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

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

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

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

guest

回答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

総合スコア21301

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

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

退会済みユーザー

退会済みユーザー

2023/01/24 23:09

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

0

ベストアンサー

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

投稿2023/01/24 22:16

m.ts10806

総合スコア80873

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

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

m.ts10806

2023/01/24 22:18

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

退会済みユーザー

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.41%

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

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

質問する

関連した質問