プログラム初心者のためのC#入門 #1 リテラルと変数・定数

# #1 リテラルと変数・定数
今回はリテラルと変数・定数について説明します．
##リテラル
リテラルは「文字通り」，「字義通り」という意味で，簡単に言うと数値や文字のことです．
**数値リテラル**には`3`や`1.5`のような数値そのままのものや，`0b1011`や`0x1d4c`のような2進数や16進数表記用のものなどがあります．
**文字リテラル**は`'A'`や`'ぬ'`のように一文字を`'`(シングルクオーテーション)で囲ったものです．
**文字列リテラル**は`"Hello."`や`"どーも"`のように文字列を`"`(ダブルクオーテーション)で囲ったものです．
文字リテラルと文字列リテラルはそれぞれ`'`(シングルクオーテーション)と`"`(ダブルクオーテーション)で囲わなければいけないという決まりがあります．これは，プログラム内に関係のない文字が混じっているとエラーになるので，「これはリテラルですよ」と主張するためです．
前回コンソールに出力した`"Hello, world!"`も文字列リテラルで，Console.WriteLine(); の丸括弧の中にリテラルを入れるとそれがそのままコンソールに出力されるようになっている．

```LiteralSample.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LiteralSample
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(7);
            Console.WriteLine(4 + 8);
            Console.WriteLine('g');
            Console.WriteLine("Hello, " + "world!");
        }
    }
}
```
```:出力結果
7
12
g
Hello, world!
```

##変数
プログラムでは変数というリテラルなどを入れるための容器のようなものがある．
変数の使い方は次の通りです．

```cs
    int num = 1;
```

intは整数(型)，numは識別子(変数名)，=は右辺の値を左辺に代入するという演算子です．
つまり`int num = 1;`は，整数の変数numを定義して，numに1を代入しますという意味です．変数名は自分で好きな名前を付けることができます．今回のように変数に特に意味のない値を持たせるときは考える必要もないですが，ふさわしい名前を付けないと混乱の元になることもあるので，正しい名前を付けるように心がけましょう．

```VariableSample.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace VariableSample
{
    class Program
    {
        static void Main(string[] args)
        {
            int num = 1;
            num = 6;         // これはOK
            num = 7 + 2;     // これもOK
            int num2;        // 変数の定義のみもOK
            num = num2;      // num2には何も入っていないのでエラー
            int num3 = num;  // これはOK
            num3 = num + 5;  // これもOK
            num = 3.4;       // これは整数ではないのでエラー
            int num = 9;     // これはnumの再定義となりエラー
        }
    }
}
```

一度numを整数型として定義するとnumは整数型の変数なので，他の整数や整数型の変数を再代入することができます．しかし，小数や文字列は代入できません．小数には小数の，文字列には文字列の型があるので，適切な型に入れる必要があります．型の詳しいことは次回の**型**で説明します．
変数の定義のみを行うこともできますが，代入せずに使おうとするとエラーとなります．
また`int num = 9;`と書いてしまうと，新たにnumという名前の変数を定義したことになり，次にnumが出てきたときにどちらのnumかわからなくなるのでエラーとなります．
ちなみにプログラムの中に`//`と書くとその行の`//`以降に書かれたものは全てコメント文として扱われ，プログラムに一切作用しない．コメント文はプログラムの説明をする以外にもプログラムの一部を一旦コメントアウト(コメント化)しておいたりする為にも用いられる．`/*`と`*/`で囲うと複数行に渡ってコメントを書くこともできます．

##定数
定数とはその名の通り変わらない値です．
リテラルもそういった意味では定数ですが，プログラムでは一度定義したら他の値を再代入できないもののことを言います．

    const int NUM = 5;

`const`を付けるだけなので簡単ですね．定数の名前は全て大文字で書くという慣習があるのでそれに倣って書きます(最初の文字だけ大文字にするなど，コミュニティによって違いがあったりします)．

```ConstantSample.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConstantSample
{
    class Program
    {
        static void Main(string[] args)
        {
            const int NUM = 1;
            NUM = 6;            // これはエラー
            const int NUM2;     // 初期化されていないのでエラー
            const int NUM = 8;  // 定数も再定義はエラー
        }
    }
}
```

一度整数型の定数として定義すると，小数や他の型の変数はもちろん，他の整数，int型の変数も代入できません．また，値を上書きできないので定数は宣言と同時に初期化しておく必要があります．

次回は[型](https://qiita.com/17t7037t/items/2f5514f5a4ce83890107)について説明します．

##練習問題
int型の変数num，int型の定数NUMを定義して各々好きな整数で初期化したものを画面に出力してください．

<details><summary>解答例</summary><div>
`num`と`NUM`．ちゃんと大文字と小文字の区別もされます．

```VariableAndConstantSample.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace VariableAndConstantSample
{
    class Program
    {
        static void Main(string[] args)
        {
            int num = 3;
            const int NUM = 7;
        }
    }
}
```
</div></details>