js-primer icon indicating copy to clipboard operation
js-primer copied to clipboard

`letではなくconstで反復処理をする` のタイトルと内容の組み合わせは意図的なものでしょうか

Open kangetsu121 opened this issue 4 years ago • 3 comments

該当ページ

  • https://jsprimer.net/basic/loop/#const-iteration

質問内容

タイトルが letではなくconstで反復処理をする となっていますが, この節の中では const を使うべき理由や, const を使った具体例の紹介はされていないように読めました。この節の目的が一見して自分にはわかりづらかったため, タイトルと内容の組み合わせが意図的なものか, 意図的な場合その意図を教えていただけるでしょうか。

kangetsu121 avatar Jan 27 '21 15:01 kangetsu121

たしかにArray#reduceの話になっていてあんまりconst関係ない感じかもしれないですね。 意図しているのはletを使わない(再代入をしない)反復処理の方法なので、なにか別のタイトルか中身を分かりやすくした方が良さそうな気がしますね。

forを使うと次のように let total という感じで let で一時的な変数を定義しなくちゃいけなくなってしまいます。

再代入を禁止することで、ミスから発生するバグを減らすことが期待できます。 このため変数を宣言する場合には、まずconstで定義できないかを検討し、できない場合はletを使うことを推奨しています。 https://jsprimer.net/basic/variables/

と書いているように、できれば letvar を使わない(再代入できない状態)方が、再代入による意図しない値の上書きなどが発生しにくいので、その方法について書いているというコラムですね。 reduceメソッド自体があんまり直感的ではないので、本文ではなくコラムに置いているという形だったと思います。 (sum関数のようにスコープが小さければ、letでそこまで問題がおきるわけじゃないので、推奨ってほどでもないという意味合いですね)

function sum(numbers) {
    let total = 0;
    for (let i = 0; i < numbers.length; i++) {
        total += numbers[i];
    }
    return total;
}

console.log(sum([1, 2, 3, 4, 5])); // => 15

azu avatar Jan 30 '21 04:01 azu

解説いただきありがとうございます!

意図しているのはletを使わない(再代入をしない)反復処理の方法なので、なにか別のタイトルか中身を分かりやすくした方が良さそうな気がしますね。

こちら, (私の問題もあると思いますが) この節を読んだ後にタイトルと見比べ, 「つまり何を説明しているのだっけ, const はどこに出てきたかな」となってしまったので, よろしければご検討よろしくお願いします。

kangetsu121 avatar Jan 30 '21 15:01 kangetsu121

JavaScript のクロージャーと for 文の let 初期化の例外 もう少し詳しい仕様的な解説

azu avatar Oct 06 '22 09:10 azu