3秒でわかる
値に名前を付けて後から呼び出せるようにする仕組み。同じ値を何度も書かずに済むうえ、付けた名前そのものがコードの意味を説明してくれます。
もう少し詳しく
どういうものか
変数は、値に名前を付けて保存し、その名前で読み書きできるようにする仕組みです。price = 1200 と書けば、以降は price と書くだけで 1200 を取り出せます。値は後から入れ替えられます。
多くの入門書では「箱」に例えられますが、Python や JavaScript では、値そのものを入れるというより、値に付けた名札に近い動きをします。この違いは、同じ値を二つの名前で指したときに表に出ます。
なぜ必要か
同じ値が何度も出てくるとき、直接書いていると変更のたびに全部を探して直すことになり、必ず漏れます。名前を付けておけば定義の 1 行を直すだけです。さらに、0.1 とだけ書かれた数字が何を意味するかは読んでも分かりませんが、tax_rate という名前が付いていれば説明が要りません。
具体例
price = 1200 # 代入して作る
count = 3
tax_rate = 0.1
subtotal = price * count
total = int(subtotal * (1 + tax_rate))
print(total) # 3960
count = 5 # 入れ替える
print(price * count) # 6000let count = 0; // 後から変える値
const taxRate = 0.1; // 変えない値
count += 1;つまずきやすいところ
名前の付け方でつまずく人が多くいます。a や data のような名前は書くときは楽ですが、一週間後に読むと何のことか分かりません。中身を説明する名前にします。
代入と等価の混同も定番です。多くの言語で = は「入れる」、== は「等しいか調べる」で、意味がまったく違います。
宣言する場所によって使える範囲(スコープ)が変わる点も見落とされます。関数の中で作った変数は外から読めません。JavaScript では let と const はブロックの中だけで有効で、var は関数全体に及ぶという違いもあります。
似た用語との違い
| 用語 | 内容 |
|---|---|
| 変数 | 後から値を入れ替えられる名前 |
| 定数 | 一度決めたら入れ替えない名前 |
| リテラル | 1200 や "abc" のように、コードに直接書かれた値 |
覚え方
「二度以上出てくる値と、意味のある値には名前を付ける」で判断できます。逆に、一度しか使わず名前を付けても説明が増えない値は、そのまま書いたほうが読みやすいこともあります。