2019-02-10 17:25:39 JavaScript

【レビュー求む】JavaScriptでfizzbuzz書きました、誰かレビューしてください。

Copy Copied! Full
for (var i=0; i <= 100; ++i) { if (i % 3 == 0 && i % 5 == 0) { console.log('fizzbuzz'); } else if (i % 3 == 0){ console.log('fizz'); } else if (i % 5 == 0){ console.log('buzz'); } else { console.log(i); } }
【レビュー求む】JavaScriptでfizzbuzz書きました、誰かレビューしてください。
'==' でなく '===' を使用する癖をつけた方が良いのでは
できる限りvarよりもletを使った方が良いと思います。
2行目のところは15の方が短く出来ますね
To 名無しさん
ありがとうございます😁
ループ変数の初期値は0じゃなくて1にするべき
Javascriptではループの初期値は普通0からですよね。配列のindexも初期値0ですし。
1から始める「べき」という理由は何ですか?
スペースの入れ方が一貫してないのが気になります
2個前の投稿をされた方とは別の者ですが、ループの初期値を 0にするかですが、通常であれば 0から始めても問題ありません。

ただ、FizzBuzz問題は以下の Wikiの通り、通常自然数を使うので 1から数え始めます。
https://ja.wikipedia.org/wiki/Fizz_Buzz

> 最初のプレイヤーは「1」と数字を発言する。次のプレイヤーは直前のプレイヤーの次の数字を発言していく。

また、細かい点ですがインクリメント演算も通常は後に付加するのが一般的です。それを踏まえると、1行目は以下になるかなと思います。

```
for (let i=1; i<=100; i++) {
```
レベルが低い
基本的に0から始めても、1から始めても、どちらでも問題はありません。

特に指定がなければ0を初期値にします。

ただし、FizzBuzzのように1から始めるのがルールである場合、1を初期値にする方が分かりやすいコードになります。

また、前の方が指摘されているように、インクリメントは、後置インクリメント(i++)で書くのが一般的です。

ただし、前置インクリメント(++i)でも問題はありません。内部的に処理が変わるだけです。
最近はforを使わずに
[...Array(100).keys()].forEach(n => {
  // 処理
})
を使うことが多いです。

1から始めるなら
[...Array(100).keys()].map(i => i + 1).forEach(n => {
  // 処理
})
みたいな感じです
forの初期値は解きたい問題によって適切に設定すればよいと思います。

今回みたいに配列を走査する必要のない問題なら0から始める必然性はないです。

むしろ教条的に「forは0から始めるんだ」とするのではなく、なぜ0から始めるのか考えて書いた方がよいと思います。