let と const を使い分ける
このレッスンで分かること
constは再代入できない宣言、letは再代入できる宣言です- 迷ったらまず
constで書き、書き換えが必要になったときだけletにします
同じ文字を 5 か所に書いてしまう
第1章では console.log("山田 太郎") のように、値を直接書いていました。名前を 5 か所で表示するなら、同じ文字列を 5 回書くことになります。表記を直したくなった日には 5 か所すべてを探して回ることになり、1 か所でも取りこぼすと表示がちぐはぐになります。
変数を使うと、値に名前を付けて 1 か所で管理できます。宣言に使うキーワードは const と let の 2 つです。
JavaScript
const author = "山田 太郎";
const heading = "作品一覧";
console.log(author);
console.log(heading);const 名前 = 値; が宣言の形です。等号 = は「等しい」ではなく「右の値を左の名前に入れる」という意味を持ちます。数学の記号とは役割が違うので、最初のうちは「author に 山田 太郎 を入れる」と声に出して読むと混乱しません。
まず const で書く
const は再代入できない宣言です。一度値を入れたら、その名前に別の値を入れ直せません。
JavaScript
const author = "山田 太郎";
author = "佐藤 花子"; // TypeError: Assignment to constant variable.不便に見えますが、読むときはむしろ楽になります。const と書いてあれば「この名前の中身は最後まで変わらない」と分かるので、途中で書き換わる可能性を追いかけずに読み進められます。
const には、宣言と同時に値を入れなければならないという決まりもあります。const bio; のように値を省くと SyntaxError になります。
書き換えるときだけ let
後から値を入れ直したい場面では let を使います。
JavaScript
let status = "下書き";
status = "公開中";
let views = 100;
views = views + 1;2 つ目の形は、今の値をもとに新しい値を作って同じ名前に入れ直す書き方です。右側が先に計算され、その結果が左の名前に入ります。let は初期値なしでも宣言できますが、値を入れる前に読み出すと undefined になります。
| キーワード | 再代入 | 使いどころ |
|---|---|---|
const | できない | 既定でこちらを使う |
let | できる | 途中で書き換えるときだけ |
判断の順番 まず
constで書きます。実行して「再代入できない」と言われたら、そこではじめてletに変えます。この順番なら、letは本当に必要な場所だけに残ります。
よくある間違い
書き換えるつもりの変数を const のままにしてしまうのが 1 つ目です。
JavaScript
const greeting = "こんにちは";
greeting = greeting + " 山田さん"; // TypeErrorlet greeting = "こんにちは"; に直します。
2 つ目は、代入したいだけなのに 2 回目にも let を書いてしまうケースです。
JavaScript
let views = 100;
let views = 101; // SyntaxError 同じ名前は宣言できない2 回目は宣言ではなく代入なので、let を外して views = 101; と書きます。
要件
- 関数名は profileLabel、引数は name (文字列) と workCount (数値) の 2 つ
- 肩書き
Web エンジニアを目指していますは再代入しないので const で宣言する - 組み立て途中のラベルは書き換えるので let で宣言する
- 戻り値は
山田 太郎 / Web エンジニアを目指しています / 作品 3 件の形の文字列
入出力例
profileLabel("山田 太郎", 3) → "山田 太郎 / Web エンジニアを目指しています / 作品 3 件"
profileLabel("佐藤 花子", 1) → "佐藤 花子 / Web エンジニアを目指しています / 作品 1 件"
profileLabel("山田 太郎", 0) → "山田 太郎 / Web エンジニアを目指しています / 作品 0 件"
profileLabel("", 0) → " / Web エンジニアを目指しています / 作品 0 件"