VB.NETで定数を定義する方法!ConstとReadOnlyの違いを初心者向けに徹底解説
生徒
「VB.NETで数字や文字をずっと変わらない値として使いたいんですが、どうすればいいですか?」
先生
「それには“定数”という仕組みを使います。VB.NETではConstとReadOnlyの2つの方法があります。」
生徒
「ConstとReadOnlyってどちらも定数ってことですか?」
先生
「名前は似ていますが、少し違いがあります。順番にわかりやすく解説していきましょう。」
1. 定数(Const・ReadOnly)とは?
VB.NETでいう定数とは、「絶対に変えてはいけない値」を名前を付けて保存しておく仕組みです。プログラムの途中で値が変わらないため、どこから読んでも意味が分かりやすくなります。例えば買い物のアプリを作るときに、毎回「0.1」や「3.14159」と数字だけ書くよりも、名前を付けておく方がミスを防げます。
実際にどれくらい便利か、簡単な例を見てみましょう。
' 定数がない場合
Dim price As Integer = 1000
Dim tax As Double = price * 0.1
' 定数を使う場合
Const 消費税率 As Double = 0.1
Dim price2 As Integer = 1000
Dim tax2 As Double = price2 * 消費税率
下の書き方のほうが「何の0.1なのか」が一目で分かりますよね。定数を使うとプログラムの意味が伝わりやすく、あとで読み返しても迷いません。
定数を使うメリットは次の通りです。
- プログラムの読みやすさが上がる
- 数字や文字をうっかり変更してしまうのを防げる
- 値を変更したいときも1か所直すだけで済む
そしてVB.NETでは、定数を作る方法が2つ用意されています。それがConstとReadOnlyです。同じ「変わらない値」でも、使い道や考え方に少し違いがあります。
2. Constとは?
Constは「書いた瞬間に値が決まる定数」です。プログラムを実行している途中で変えることは絶対にできません。「絶対に変えてはいけない数字」や「固定の文字」を使うときに便利で、ミスを防ぎながらコードを読みやすくできます。
例えば次のように使います。
Const 消費税率 As Double = 0.1
Const 円周率 As Double = 3.14159
Const アプリ名 As String = "サンプル電卓"
どれも途中で書き換えることはできません。数字だけでは意味が分かりにくい場面でも、名前を付けておくことで「これは何の数字なのか」が一目で分かります。
実際にプログラムの中で使う例を見てみましょう。
Const 消費税率 As Double = 0.1
Dim 金額 As Integer = 1000
' 税込みを計算
Dim 税込価格 As Double = 金額 * (1 + 消費税率)
Console.WriteLine("税込価格は " & 税込価格 & " 円です")
税込価格は 1100 円です
毎回「0.1」と書かずに済むため、値を変更したい時もConst 消費税率の1行を変更するだけで全体に反映できます。こうした点から、Constは「変える必要のない値」を扱うときにとても役立つ仕組みです。
3. ReadOnlyとは?
ReadOnlyは「読み取り専用の変数」です。Constと違い、値をプログラムの実行時に決めることができます。ただし、一度値を代入したら変更はできません。
例えば次のように書きます。
ReadOnly 開始日時 As DateTime = DateTime.Now
この場合、プログラムを実行した瞬間の日時が開始日時に入ります。Constでは「実行時の値」を入れることはできないので、このような場面ではReadOnlyを使います。
クラスの中でもよく使われます。例えば次のように書けます。
Class サンプル
Public ReadOnly 作成日時 As DateTime
Public Sub New()
作成日時 = DateTime.Now
End Sub
End Class
これにより、オブジェクトを作った時点の日時を保存でき、後から勝手に変更されることはありません。
4. ConstとReadOnlyの違い
ここで一度、ConstとReadOnlyの違いを整理してみましょう。
| 特徴 | Const | ReadOnly |
|---|---|---|
| 値を決めるタイミング | プログラムを書いたとき(コンパイル時) | プログラムが動いたとき(実行時) |
| 再代入 | できない | できない(ただし初期化時のみ代入可能) |
| 主な用途 | 円周率・税率・固定の文字列など | 日時・ランダムなID・外部から渡される値など |
つまり「プログラムを書くときにもう決まっている値」ならConst、「実行してみないとわからないけど変更してほしくない値」ならReadOnlyを選ぶと覚えると分かりやすいです。
5. 実生活で例えると?
イメージしやすいように、実生活の例で考えてみましょう。
- Constは「歴史の事実」… 例えば「1年は365日」という事実は変わりません。
- ReadOnlyは「日記に書いた日付」… その日付は一度書いたら変えられませんが、書くときに決まります。
このように考えると違いがぐっと理解しやすくなります。
6. 初心者が気をつけるポイント
最後にVB.NET初心者がよくつまずくポイントをまとめます。
Constには数値や文字列のような「決まった値」しか代入できないReadOnlyはクラスやモジュールの中で使うことが多い- 「ConstなのかReadOnlyなのか」でエラーが出たら「値が実行時に決まるものかどうか」を考えると解決しやすい
最初は混乱するかもしれませんが、実際に使いながら覚えていくのがおすすめです。
まとめ
VB.NETで定数を使うと、プログラムが分かりやすくなり、予期しない変更やミスを防ぐことができます。特に「よく使う値」や「変わると困る情報」を定数にまとめておくと、後からコードを見返したときにも迷いません。今回紹介したConstとReadOnlyは、どちらも「変更できない値」を扱いますが、決まるタイミングが違うという部分が重要なポイントでした。
例えば、消費税率や円周率のように「最初から決まっている値」はConstが向いています。一方で、プログラムを実行したときに決まる値、たとえば現在の日時や外部から受け取った値などはReadOnlyのほうが活躍します。同じ「変わらない値」でも、状況で使い分けると、より安全で読みやすいコードになるのがVB.NETの面白いところです。
簡単なサンプルでおさらい
Const アプリ名 As String = "定数サンプル"
ReadOnly 起動時刻 As DateTime = DateTime.Now
Console.WriteLine(アプリ名)
Console.WriteLine("起動した時間: " & 起動時刻)
このように、Constは最初から変わらない名前を持った値を扱い、ReadOnlyは実行したときに決まる情報を扱います。どちらも特別な書き方ではなく、普段のVB.NETのコードに自然に馴染むのも魅力です。最初は難しく感じるかもしれませんが、実際に書いて動かしてみるとすぐに違いが見えてきます。
生徒
「ConstとReadOnlyの違い、やっと分かってきました!」
先生
「良かったです。特に“いつ値が決まるか”を意識できると、使い分けがぐっと楽になりますよ。」
生徒
「消費税率みたいに絶対変わらないものはConst、時間みたいに実行してみないと分からないものはReadOnly…で覚えます!」
先生
「その考え方で大丈夫です。VB.NETでは定数をうまく使うとコードがとても読みやすくなるので、少しずつ実践してみましょう。」