C# 僕が独断と偏見で選ぶC#初心者が覚えるべき「標準定義データ型」とは？

さて、今回はデータ型について。
データ型たくさんありますよね〜
個人的にこれだけ覚えれば大丈夫！ってのを最後の方にまとめてみたので、すっ飛ばしてどうぞ。

# データ型って何？
プログラミング言語では基本的に変数を宣言してデータを格納(代入)します。
その時にデータ型を登録するのですが、このデータ型を間違えると痛い目に遭います。
データ型には様々な種類がありますが、これもまたややこしいんですよね〜
データ型は大きく分けて「標準定義データ型」と「ユーザー定義データ型」に分けられますが、今回は「標準定義データ型」に限定してご紹介します。(「ユーザー定義データ型」は別記事で！)
※ちなみに標準定義データ型はほとんどが値型(string型とobject型は参照型)と呼ばれるもので、ユーザー定義データ型は値型と参照型に分けられます。
というわけでリストをどうぞ。
| 格納できるもの | データ型 | 値の範囲 |
|:-:|:-:|:-:|
|  数値 |  byte |  0~255 |
|  数値 |  ushort |  0 ~ 65,535 |
|  数値 |  uint |  0 ~ 4,294,967,295 |
|  数値 |  ulong |  0 ~ 18,446,744,073,709,551,615 |
|  数値 |  sbyte |  -128 ~ 127 |
|  数値 |  short |  -32,768 ~ 32,767 |
|  数値 |  int |  -2,147,483,648 ~ 2,147,483,647 |
|  数値 |  long |  -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
|  数値 |  float |  ±1.5×10^-45 ~ ±3.4×10^38 |
|  数値 |  double |  ±5.0×10^-324 ~ ±1.7×10^308 |
|  数値 |  decimal |  ±1.0×10^-28 ~ ±7.9×10^28 |
|  論理値 |  bool |  true もしくは false |
|  文字 |  char |  Unicode文字(16ビット) |
|  文字列 |  string |  Unicode文字列 |
|  オブジェクト |  object |  好きなデータ型を格納できる魔法の型 |

これが標準定義データ型となります。
こんなん初心者が覚えられるかっ
とはいいましたが、コンピュータサイエンスに精通している方や基本情報技術者の資格をとっている方などは、ユーザー定義データ型も含めて気にするところかと思います。(もちろんベテランプログラマーさんも？)
プログラムってメモリが割り当てられていて、「どれだけ効率よくメモリを使い、メモリの負荷を抑えながら処理できるか(要するに動作が軽くなればいいよねってお話)」というのがあるので、変数のデータ型というものはかなり気にするものなのかなと思います。
(表現が合っているかも含めて、有識者の方のご意見をお伺いしたいです。)

### uintとかのuって何？
uint型は「符号なし整数」とのことなので、「u」がついているものはマイナスの値は含まれないデータ型ということになります。
(という認識で合ってます？)
※uintの「u」やsbyteの「s」は何の頭文字なのか、コメントしてくださった方がいらっしゃるので是非ご覧ください！

# 実際にデータ型を見てみよう
```C#:変数の宣言と格納
int i = 0; 
string str1 = "Hello World";
var str2 = 10;
```
上に三つの例を挙げてみました。(変数名おかしくね？などのコメントは受け付けておりません。)
まずはこの三つで見ていきましょう。

## int i = 0;
訳：int型の変数iを生成して、iに0を代入してください
これ以上言うことありません。
int型というのはintegerの略ですが、数値のデータ型となります。
では次。

## string str1 = "Hello World";
訳：string型の変数str1を生成して、str1にHello Worldを代入してください
そういうことです。このstring型は文字列のデータ型となります。
strはstringの略なので、string型であることがわかりやすいですね(これ伏線)


## var str2 = 10;
勘のいい方はお気付きかと思います。急に出てきたこの「var」、これ魔法の単語なんです。
C#って賢くて、varを使って変数を宣言・代入すると、自動的に型を決めてくれるのです。
逆に自動で型を決めてくれるからこその落とし穴があります。
変数名は「いかにも文字列！」って感じなのですが、str2のデータ型としてはint型なのです。
なぜか。
もしこれが以下のコードであればstring型のデータ型になります。

```C#:
var str2 = "10";
//元のコード
var str2 = 10;
```
何が違うんでしょうねぇ〜
<br><br><br><br>
はい、答えは「”(ダブルクォーテーション)」で囲まれているかどうかです。
ここがvarの落とし穴なのですが、開発時には役に立つこともあります。
開発の段階で変数に格納(代入)する値が正確にわかっていない時、「varキーワードで宣言した変数」を後から「データ型を指定した書き方に変えてやる」と開発が楽になる場合があります。
この辺は初心者の僕が語れることは少ないのでベテランの方、補足のご説明よろしくお願いします。

ちなみに「”(ダブルクォーテーション)」ではなく、「'(シングルクォーテーション)」で囲むとデータ型はchar(characterの略)型となり、文字は１文字しか格納できません。
Pythonでのstring型(文字列)は、「"」「'」のどちらを使ってもいいので慣れが必要？
僕自身はあまり困ったことはないんですけどね。
１文字なら「'」、複数の文字なら「"」という感じで使い分けられるし、わかりやすいといえばわかりやすい。


# 初心者が覚えるべき標準定義データ型
というわけでここまでデータ型について色々書いてきましたが、やっとお待ち兼ね「結局何覚えりゃいいのよ」ってところです。
上のリストから抜粋する感じでいきましょう。
ということではいどうぞ

| 格納できるもの | データ型 | 値の範囲 | 　優先順位 |
|:-:|:-:|:-:|:-:|
|  数値 |  int |  -2,147,483,648 ~ 2,147,483,647 |  1 |
|  数値 |  double |  ±5.0×10^-324 ~ ±1.7×10^308 |  2 |
|  論理値 |  bool |  true もしくは false |  3 |
|  文字列 |  string |  Unicode文字列 |  1 |

こんなもんですかね、スッキリしました！

## なぜこのデータ型なのか
### int、double
int、doubleに関しては、初心者の方が高度な計算をすることはまずない、というよりそんなことできるならもはや脱初心者できていると思います。
初心者の方が数値データを扱うならこのデータ型で十分でしょう。
数値を広範囲にカバーできて、メモリ自体も程よく使える、そして参考書は大体このデータ型を扱っている(参考書に関してはdecimal型を扱うこともありますが)という理由です。(僕はこの考えですがどうでしょう？)

### bool
論理値を扱うデータ型ですね。
条件分岐(if文)の部分で役に立ちます。
C#は初心者なのでまだ自由に扱えていません(機会がないだけ？)が、VBAやPythonではよく使用します。
リスト内では一番低い優先順位ですが。

### string
１文字だけを扱うなんて状況は、初心者ではなかなかないかと思います。
とはいいつつchar型も覚えてしまえば数値型、論理型、文字列型、文字型と一通りのデータ型はカバーできているのかなと思います。


# 最後に
今回データ型について簡単にご紹介しましたが、これでも難易度は低い方です。
さらに低くするために「覚えるべきデータ型」なるものをさらっとお伝えしましたが、僕の個人的意見です笑

今回はVBAとかPythonとか出てきたのでそのうちこれらについても解説していければと思います。