はじめに
プログラミングの学習で「定数(Constant)」という言葉が出てきて、「これって一体何のことだろう?」と悩んでいませんか?
ご安心ください。この記事を読み終える頃には、あなたは以下のことがわかり、プログラミングの理解が一段と深まっているはずです。
- 「定数」の役割が比喩でわかる
- なぜ「定数」が必要なのかがわかる
- 「定数」の基本的な書き方と、よくあるエラーがわかる
まずは基本!定数って一体なんだろう?
プログラミングにおける「定数」とは、「一度決めたら途中で変えられない値を入れる箱」のことです。値が変わらないデータを扱いたいときに使われます。
比喩で例えるなら…
「変数」が、中身を入れ替えたり、使ったら補充したりできる普通の保存容器だとすれば、「定数」は少し特別です。
これは、一度入れたら、その中身ごと固まって取り出せなくなる魔法の容器のようなものです。
例えば、キッチンに「我が家のカレーの隠し味」と書いた魔法の容器があるとします。そこに一度「インスタントコーヒーの粉」を入れたら、もうその容器から中身を取り出すことも、別のものに入れ替えることもできません。
その容器は、プログラムが終わるまで、ずっと「インスタントコーヒーの粉」であり続けるのです。
このように、プログラムの中で「絶対に変わらない、変えてはいけない値」を保存しておくのが定数の役割です。円周率(3.14159…)や、消費税率など、計算の基準となる重要な値を定数にしておけば、間違って書き換えてしまう心配がなくなります。
「定数」の基本的な使い方
基本構文
PI = 3.14159
TAX_RATE = 0.1
Pythonには、JavaScriptのconst
のような、値を変更できなくする厳密な意味での「定数」はありません。そのため、開発者の間で「この値は書き換えないでください」という目印(慣習)として、変数名をすべて大文字で書くというルールがあります。
const PI = 3.14159;
const TAX_RATE = 0.1;
const
キーワードを使うと、後から値を変えようとしたときにエラーになります。
具体的なコード例
const TAX_RATE = 0.1;
let price = 1000;
let total = price + price * TAX_RATE;
console.log("合計金額は", total, "円です");
出力:
合計金額は 1100 円です
なぜ『定数』が必要なの?
もし「定数」がなかったら…
let taxRate = 0.1; // 税率を「変数」で定義
// ... プログラムの他の部分で ...
// どこかで誤って値を変更してしまう(バグの原因になる)
taxRate = 0.08;
税率が勝手に書き換えられると、計算結果が間違ってしまいます。
「定数」を使うとこう改善される!
const TAX_RATE = 0.1;
// TAX_RATE = 0.08; // ← ここでエラーになる!
意図しない変更を防げるので、安全で読みやすいコードになります。
初心者がやりがちなミスと注意点
陥りやすい誤解
「定数も変数と同じように変えられる」と思っていませんか?
const
で宣言した値は変更できません。再代入しようとするとエラーになります。
よくあるエラー
TypeError:Assignment to constant variable.
原因:const
で宣言した定数に、新しい値を再代入しようとしたため。
対策:値が変わる可能性があるものはlet
を使い、変わらないと決まっているものはconst
を使う、というように明確に使い分けましょう。
まとめ:この記事のポイント
- 「定数」は一言でいうと「途中で変わらない値を入れる箱」!
- 「定数」を使うと、意図しない値の上書きを防げて、プログラムの信頼性が上がる!
- 使い方の基本は「
const 定数名 = 値
」で、後から値を変更(再代入)できないので注意!
これも知っておくと便利!定数の仲間たち(関連用語)
- 変数(Variable):定数は値を変更できませんが、変数は変更可能です。「変更可能かどうか」が両者の違いです。
- スコープ(Scope):定数も変数もスコープ(有効範囲)を持ちます。グローバル定数かローカル定数かで使える場所が変わります。
- マジックナンバー(Magic Number):プログラム中に直接書かれた数字や文字列は、定数として名前を付けることで意味を持たせられます。
【コラム】少しだけ「定数」の裏側を覗いてみよう
JavaScriptなどでは、const
で宣言しても「オブジェクトや配列の中身」は変更できる場合があります。例えば:
const user = { name: "Taro" };
user.name = "Jiro"; // OK(オブジェクトの中身を変更している)
つまり、「const
」は再代入できないことを保証しますが、中身の変更を完全に防ぐわけではない点も覚えておくと良いでしょう。