定数(constants)を理解しよう!

[C#] 定数(constants)を理解しよう!

※ 当サイトは広告を含みます。

ここではC#の定数を学びましょう。

定数 (constants)

定数とは名前の通りで固定された値です。つまりは変数のように値を変更することができません。
また、仮に定数を変更しようと試みるとビルドエラーになるので、変更するという行為自体が禁止されます。

これのメリットは、コーディングのミス等で本来変えてはいけない数値を触る危険性を回避できます。
また、定数は変数のように名前を与えることができるので、0や1など意味不明な数値を減らすことができます。

定数を定義する方法

簡単です。通常の変数宣言にconstを加えると定数として扱われます。


const 型名 変数名;

例として次の変数を定数に変えてみましょう。


double Pi = 3.14;

結論としてこうなります。


const double Pi = 3.14;

これは定数を使ったサンプルコードです。
コメントの有無でビルドエラーになることを確認しましょう。


namespace Sample
{
  internal class Program
  {
    static void Main(string[] args)
    {
      const double Pi = 3.14;

      //Pi = 1000;

      Console.WriteLine(Pi);
    }
  }
}

マジックナンバー

これはプログラムの機能ではなく概念の話です。まぁ、座学なので適当に聞いてください。
これまでの学習でプログラム中にも数値や文字列を直接記述できることは分かりましたよね。

ですが、コードに直接的に数値(文字列も)を書くことは好ましくなく、この時に書かれた数値をマジックナンバーと呼びます。

このマジックナンバーの定義ですが、意図や意味を開発者本人しか理解できない数値を指します。
そして、そういう値をプログラム内に直接記述することをハードコーディングまたはハードコードと言います。

りさ
りさ

言葉だけでは理解できないです。

管理人
管理人

まずはサンプルコードを見てみよう。caseの値がマジックナンバーに当たるよ。


namespace Sample
{
  internal class Program
  {
    static void Main(string[] args)
    {
      int mode = 0;

      switch (mode)
      {
        case 0:
          Console.WriteLine("初期化");
          break;

        case 1:
          Console.WriteLine("追加");
          break;

        case 2:
          Console.WriteLine("削除");
          break;

        default:
          Console.WriteLine("何もしない");
          break;
      }
    }
  }
}
管理人
管理人

modeの値によって何れかの機能を動かすコードです。しかし、開発した本人以外にcaseの数値の意味が分かるでしょうか。

りさ
りさ

確かに0, 1, 2の意味は本人しか分かりませんね。

管理人
管理人

このように開発者しか判断できず、コードに直接書かれた数値をマジックナンバーと言うんだ。
では、どうしたらいいか。ここで定数が登場します。書き直したサンプルコードを見てみましょう。


namespace Sample
{
  internal class Program
  {
    static void Main(string[] args)
    {
      const int MODE_INIT = 0;
      const int MODE_ADD = 1;
      const int MODE_DELETE = 2;

      int mode = MODE_INIT;

      switch (mode)
      {
        case MODE_INIT:
          Console.WriteLine("初期化");
          break;

        case MODE_ADD:
          Console.WriteLine("追加");
          break;

        case MODE_DELETE:
          Console.WriteLine("削除");
          break;

        default:
          Console.WriteLine("何もしない");
          break;
      }
    }
  }
}
りさ
りさ

分かりやすくなった!

管理人
管理人

このように定数を使うことで意味不明な数値にも意味を与えることができました。
ちなみに定数は数値や文字列など主に組み込み型でしか使えません。例として配列を丸ごと定数化は無理です。

あとがき

学習段階ではマジックナンバーの使用は問題ありませんが、業務レベルで使うと重罪なので気をつけましょう。

管理人
管理人

使ってしまったら最後、翌日から自席が消滅して、元から存在しなかったやつ扱いされます。

りさ
りさ

世の中の人はマスターほど非情じゃありません。

◆ C#に関する学習コンテンツ

この記事は参考になりましたか?

関連記事

コメント

この記事へのコメントはありません。